oracle时间为null保存报错,Oracle字符串操做、Oracle数值操
做、Orac。。。
1. 字符串操做
1.1. 类型
1.1.1. 和VARCHAR2类型
CHAR和VARCHAR2都是⽤来表⽰字符串数据类型,⽤来在表中存放字符串信息, 好⽐姓名、职业、地址等。html
CHAR存放定长字符,若是存不满定长长度,则补齐空格;java
VARCHAR2存放变长字符,实际数据有多少长度则占⽤多少。
如保存字符串’HELLOWORLD’,共10个英⽂字母:sql
CHAR(100): 10个字母,补齐90个空格,实际占⽤100个字节。
VARCHAR2(100) :10个字母,实际占⽤10个字节。
CHAR类型浪费空间换取查询时间的缩短,VARCHAR2节省空间查询时间较CHAR类型要长。字符串按照天然顺序排序。数据库
1.1.
2. CHAR和VARCHAR2的存储编码
字符串在数据库中存储的默认单位是字节,也可显式指定为字符。如:编程
CHAR(10),等价于 CHAR(10 BYTE)
若是指定单位为字符:CHAR(10 CHAR),20个字节
VARCHAR2(10), 等价于VARCHAR2(10 BYTE)
指定单位为字符:VARCHAR2(10 CHAR),20个字节
每⼀个英⽂字符占⽤⼀个字节,每⼀个中⽂字符按编码不⼀样,占⽤2-4个字节:oracle
ZHS16GBK: 2个字节
UTF-8: 2-4个字节
1.1.3. CHAR和VARCHAR2的最⼤长度
CHAR类型的最⼤取值为2000字节,也就是定义为CHAR(2000)。其中最多保存2000个英⽂字符,1000个汉字(GBK)。编程语⾔
VARCHAR2最⼤取值为4000字节,也就是VARCHAR2(4000),最多保存4000个英⽂字符,2000个汉字(GBK)。函数
CHAR若是不指定长度,默认为1个字节, VARCHAR2必须指定长度。编码
1.1.4. LONG和CLOB类型
LONG类型能够认为是VARCHAR2的加长版,⽤来存储变长字符串,最多达2GB的字符串数据,可是LONG类型有诸多限制,因此不建议使⽤:
每⼀个表只能有⼀个LONG类型列;
不能做为主键;
不能创建索引;
不能出如今查询条件中等
CLOB⽤来存储定长或变长字符串,最多达4GB的字符串数据,Oracle建议开发中使⽤CLOB替代LONG类型,好⽐以下⽅式定义数据表:
CREATE TABLEstudent(
idNUMBER(4),
nameCHAR(20),
detailCLOB);
CREATE TABLE student(
id NUMBER(4),
name CHAR(20),
detail CLOB);
1.2. 字符串函数
1.2.1. CONCAT和“||”
CONCAT是字符串链接函数,语法是:
CONCAT(char1, char2)
CONCAT(char1, char2)
⽤于返回两个字符串链接后的结果,两个参数char⼀、char2是要链接的两个字符串。concat只能有两个参数,因此若是链接三个字符串时,须要两个concat函数。好⽐链接emp表中的name列和salary列,中间⽤“:”隔开:
SELECTCONCAT(CONCAT(name, ' : '), sal)FROMemp;
SELECT CONCAT(CONCAT(name, ' : '), sal)FROM emp;
图-1 CONCAT链接字符串的结果
在链接两个以上操做符时并⾮很⽅便。concat的等价操做是链接操做符”||”。当多个字串链接时,⽤||符号更直观。下述SQL语句实现相同的效果:
SELECTename || ' : ' || salFROMemp;
SELECTename || ' : ' || sal FROMemp;
在链接时,若是任何⼀个参数是NULL,⾄关于链接了⼀个空格。
1.2.2. LENGTH
LENGTH(char)⽤于返回参数字符串的长度。若是字符类型是VARCHAR2,返回字符的实际长度,若是字符类型是CHAR,长度还包括后补的空格。例如:
SELECTename, LENGTH(name) FROMemp;
oracle decimal类型SELECTename, LENGTH(name) FROM emp;
将列出name和name的字符串长度:
图-2Lenth函数的运⾏结果
1.2.3. UPPER、LOWER和INITCAP
这三个函数所有是英⽂的⼤⼩写转换函数,⽤来转换字符的⼤⼩写:
UPPER(char)⽤于将字符转换为⼤写形式
LOWER(char)⽤于将字符转换为⼩写形式
INITCAP(char)⽤于将字符串中每⼀个单词的⾸字符⼤写,其它字符⼩写,单词之间⽤空格和⾮字母字符分隔
若是这三个函数的输⼊参数是NULL值,仍然返回NULL值。例如:
SELECTUPPER('hello world'), LOWER('HELLO WORLD'), INITCAP('hello world')
FROMDUAL;
SELECT UPPER('hello world'), LOWER('HELLO WORLD'), INITCAP('hello world')
FROM DUAL;
将列出参数“hello world”的⼤写、⼩写和⾸字符⼤写的形式。通常⽤来查询数据表中不肯定⼤⼩写的状况。查询结果如图-3所⽰。
图-3⼤⼩写转换函数的运⾏结果
1.2.4. TRIM、LTRIM、RTRIM
这三个TRIM函数的做⽤都是截去⼦字符串。语法形式及解释:
TRIM(c2 FROM c1) 表⽰从c1的先后截去c2
LTRIM(c1[, c2]) 表⽰从c1的左边(Left)截去c2
RTRIM(c1[, c2]) 表⽰从c1的右边(Right)截去c2
在后两个函数中,若是没有参数c2,就去除空格。例如:
SELECTTRIM('e' from 'elite') ASt1,
LTRIM('elite', 'e') ASt2,
RTRIM('elite', 'e') AS t3
FROMDUAL;
SELECT TRIM('e' from 'elite') AS t1,
LTRIM('elite', 'e') AS t2,
RTRIM('elite', 'e') AS t3
FROM DUAL;
其中最经常使⽤的是TRIM,常常⽤来去掉字符串先后的空格。运⾏结果如图-4所⽰。
图-4TRIM函数的运⾏结果
1.2.5. LPAD、RPAD
PAD意即补丁,LPAD和RPAD两个函数都叫作补位函数,LPAD表⽰LEFT PAD,在左边打补丁,RPAD表⽰RIGHT PAD,在右边打补丁。语法以下:
LPAD(char1, n, char2) 左补位函数
RPAD(char1, n, char2) 右补位函数
参数的含义:在字符串参数char1的左端或右端⽤char2补⾜到n位,其中参数char2可重复屡次。例如在EMP表中使⽤左补位,将sal⽤$补齐6位,运⾏结果如图-5所⽰。
图-5补位函数的运⾏结果
1.2.6. SUBSTR
SUBSTR表⽰在⼀个字符串中截取⼦串,语法是:
SUBSTR(char, [m[, n]])
SUBSTR(char, [m[, n]])
⽤于返回char中从m位开始取n个字符的⼦串,字符串的⾸位计数从1开始。参数含义以下:
若是m = 0,则从⾸字符开始,若是m取负数,则从尾部开始
若是没有设置n,或者n的长度超过了char的长度,则取到字符串末尾为⽌
例如:
SELECT
SUBSTR('Doctor Who travels in TARDIS', 8, 25)
FROMDUAL;
SELECT
SUBSTR('Doctor Who travels in TARDIS', 8, 25)
FROM DUAL;
图-6取⼦串函数的运⾏结果
1.2.7. INSTR
⽤来返回在⼀个字符串中⼦串的位置。语法是:
INSTR(char1, char2[, n [, m]])
INSTR(char1, char2[, n [, m]])
参数的含义:
返回⼦串char2在源字符串char1中的位置
从n的位置开始搜索,没有指定n,从第1个字符开始搜索
m⽤于指定⼦串的第m次出现次数,若是不指定取值1
若是在char1中没有到⼦串char2 ,返回0
例如:
SELECTINSTR('Doctor Who', 'Who') words FROMDUAL;
SELECT INSTR('Doctor Who', 'Who') words FROM DUAL;
结果将返回8.
2. Oracle数值操做
2.1. 数值类型
2.1.1. NUMBER(p)表⽰整数
数据表中的数值类型⽤NUMBER表⽰,完整语法是:
NUMBER(precision ,scale)
NUMBER(precision ,scale)
能够⽤来表⽰整数和浮点数。若是没有设置参数s,则默认取值0,即NUMBER(p)⽤来表⽰整数。P表⽰数字的总位数,取值为1-38。通常⽤来在表中存放如编码、年龄、次数等⽤整数记录的数据。例如建表时指定学⽣编码是4位数字:
CREATE TABLEstudent (
idNUMBER(4),
nameCHAR(20));
CREATE TABLE student (
id NUMBER(4),
name CHAR(20));
2.1.2. NUMBER(P,S)表⽰浮点数
若是NUMBER(precision ,scale)的两个参数所有显式定义,则表⽰浮点数:
precision:NUMBER能够存储的最⼤数字长度(不包括左右两边的0)
scale:在⼩数点右边的最⼤数字长度(包括左侧0)
若是指定了s可是没有指定p,则p默认为38,例如:
列名 NUMBER(*,S)
列名 NUMBER(*,S)
NUMBER(p,s)常常⽤来作表中存放⾦额、成绩等有⼩数位的数据。例如建⽴学⽣表,指定成绩整数位最多3位,⼩数位最多2位:
CREATE TABLEstudent (
idNUMBER(4),
nameCHAR(20),
scoreNUMBER(5, 2));
CREATE TABLE student (
id NUMBER(4),
name CHAR(20),
score NUMBER(5, 2));
NUMBER的变种数据类型:内部实现是NUMBER,能够将其理解为NUMBER的别名,⽬的是多种数据库及编程语⾔兼容
NUMERIC(p,s):彻底映射⾄NUMBER(p,s)
DECIMAL(p,s)或DEC(p,s):彻底映射⾄NUMBER(p,s)
INTEGER或INT:彻底映射⾄NUMBER(38)类型
SMALLINT:彻底映射⾄NUMBER(38)类型
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论