Oracle数据类型及函数

一、数字类型 :NUMBER 
          定义形式:NUMBER(P,S),P 代表数字的总位数(整数位 + 精度位),S 代表精度(可以不写。不写表示整数)
          NUMBER(P)表示整数, P 表示数字的总位数,取值为 1-38
          NUMBER(P,S) 表示浮点数, P包含了 S 。
          例如: NUMBER(6,2), 那么整数位最大位是 4 位,小数位最大位是 2位
       数值函数
  • ROUND(n, m) --- 用于四舍五入
               (0) n可以是任何数
               (1) m必须是整数
               (2) m取正数则四舍五入到小数点后第 m 位
               (3) m取 0 值则四舍五入到整数位
               (4) m取负数,则四舍五入到小数点前 m 位
               (5) m缺省,默认值是 0
          例如:SELECT ROUND('25.6612',2) FROM DUAL

  • TRUNC(n, m) --- 用于截取小数点后的 m 位,但不进行四舍五入
          例如:SELECT TRUNC('25.6612',1) FROM DUAL

  • MOD(m, n) --- 取模函数,注意:在数据库中 n 可以为零,返回原值
          例如:SELECT MOD(25,0) FROM DUAL

  • CEIL(N) --- 取大于或等于 n 的最小整数值
          例如:SELECT CEIL(4.2) FROM DUAL

  • FLOOR(N) --- 取小于或等于 n 的最大整数值
          例如:SELECT FLOOR(4.5) FROM DUAL



二、字符串类型:
  • 默认单位是字节,可指定为字符:
     a)    CHAR(10),等价于CHAR(10 byte)
               b)    指定单位为字符 --- CHAR(10 CHAR), 20个字节
               c)    VARCHAR2(10),等价于VARCHAR2(10 BYTE)

  • CHAR :表示固定长度的字符类型
          定义形式:CHAR(N),N表示占用的字节数,最大长度 2000 字节。
          注意:-无论实际数据多长,都会将数据补充若干空格,达到该字段实际指定的长度。
                    - CHAR 可以不指定长度,默认长度为 1 。
          优点:查询效率好
          缺点:浪费磁盘空间
  • VARCHAR2 : Oracle 特有类型,表示变长的字符类型
     定义形式:VARCHAR2(N),N 表示占用的字节数,最大长度 4000 字节,数据多长就保存多长,用多少占多少。
     优点:磁盘空间利用好
     缺点:查询效率低。
  • LONG : VARCHAR2加长版,存储变长字符串,最多达到 2GB 的字符串数据,
          限制:每个表只能有一个 LONG 类型列;不能作为主键;不能建立索引;不能出现在查询条件中。          
  • CLOB :存储定长或变长字符串,最多达到 4GB 的字符串数据,建议使用 CLOB 代替LONG 。
        字符串函数
  • CONCATE(char1,char), 返回两个字符串连接后的结果,一般使用“ || ”来代替
          例如:SELECT CONCAT(ename,':') || job FROM emp_rs

  • LENGTH(char), 用于返回这个字符串的长度(字符量)
          例如: SELECT ename, LENGTH(ename) FROM emp_rs

  • UPPER(char) ,用于将字符转换为大写形式 
  • LOWER(char) ,用于将字符转换为小写形式
  • INITCAP(char) ,用于首字母大写,其它字母小写(其中可以使用空格分隔多个单词,那么每个单词首字母都会大写)
          例如:SELECT UPPER('helloworld'),LOWER('HELLOWORLD'),INITCAP('HELLO WORLD') FROM DUAL

  • TRIM(c2 from c1) --- 去除给定字符串中两边重复的给定字符
          例如:SELECT TRIM('e' FROM 'eeeeeliteeeee') FROM DUAL

          LTRIM(c1[,c2]) --- 可以单独去除左面的字符
          例如:SELECT LTRIM('eeeeeliteeeee','e') FROM DUAL

          RTRIM(c1[,c2]) ---可以单独去除右面的字符
          例如:SELECT RTRIM('eeeeeliteeeee','e') FROM DUAL

  • LPAD(char1, n, char2) --- 补位函数,在左边补充
          例如:SELECT LPAD(sal,10,' ') FROM emp_rs

          RPAD(char1, n, char2) --- 补位函数,在右边补充
          例如:SELECT RPAD(sal,10,' ') FROM emp_rs 

  • SUBSTR(char, offset, n) --- 用于获取字符串的子串,返回 char 中从m 位开始取 n 个字符。Offset 为负数时,就是从字符串最后一位开始, n 不能为负数。若截取的字符数量超过实际可以截取的字符数量时,则截取到字符串末尾。数据库中下标都是从 1 开始的
          例如:SELECT SUBSTR('Thinking in java', 10, 2) FROM DUAL

  • INSTR(char1, char2[,n,m]) --- 返回子串 char2 在源字符串char1 中的位置,
              n : 从char1 的第几个字符开始查找(不写则为 1 )
              m : 查找第几次出现(不写则为 1 )
          例如:SELECT INSTR('Thinking in java', 'in', 4, 2) FROM DUAL



三、日期类型:
  • 日期类型的数据是可以进行运算的,两个日期类型的值相减,差为相差的天数;给一个日期的值加上一个数字,相当于累加了多少天
          例如:SELECT SYSDATE - TO_DATE('1993-07-05','YYYY-MM-DD') FROM dual

  • DATE --- 最多精确到秒
                         表示定义日期时间的数据,长度 7 个字节,7 个字节分别存储 世纪、年、月、日
                         默认格式: DD-MON-RR( 日月年) ,但是秒以下的精度保存不了
               -RR:可以自动判断世纪
               
                Sys:表示系统目前的年份, user 表示用户输入的年份。
                例如: RR 是03 ,那么在 sys 中是0-49 这个区间,在 user 中是在0-49 这个区间,它们的交集就是此 RR 表示的世纪——本世纪。

  • TIMESAMP --- 最多精确到纳秒

        日期关键字:
  • SYSDATE --- 本质是一个 Oracle 的内部函数,返回当前的系统时间,精度为秒,默认显示格式是 DD-MON-RR.
  • SYSTIMESTAMP --- 返回当前系统日期和时间,精确到毫秒

        日期转换函数
  • TO_DATE --- 按照字符串规定的格式转换为日期类型
         常用的日期格式:
YY
2 位数字的年份
YYYY
4 位数字的年份
MM
2 位数字的月份
MON
简拼的月份
MONTH
全拼的月份
DD
2 位数的天
DY
周几的缩写
DAY
周几的全拼
HH24
24 小时制的小时
HH12
12 小时制的小时
MI
显示分钟
SS
显示秒
     例如:SELECT TO_DATE('2015年12月17日','YYYY"年"MM"月"DD"日"') FROM dual
  
  • TO_CHAR --- 将其它类型的数据转换为字符类型
     例如: SELECT TO_CHAR(TO_DATE('88-02-22','RR-MM-DD'),'YYYY-MM-DD') FROM dual
                SELECT TO_CHAR(SYSDATE,'YYYY"年"-MM"月"-DD"日"') FROM dual

       日期常用的函数:
  • LAST_DAY(date) --- 返回日期date 所在月的最后一天
          例如:SELECT LAST_DAY(SYSDATE) FROM dual

  • ADD_MONTHS(date, i) --- 返回日期 date 加上i 个月后的日期值
          - 参数 i可以是任何数,大部分时候去正值整数
          - 如果 i是小数,将会被截取整数后再参与运算
          - 如果 i是负数,则获得的是减去 i 个月后的日期值
          例如:

  • MONTHS_BETWEEN (date1, date2) --- 计算 date1和 date2 两个日期值之间间隔了多少个月,实际运算是 date1-date2, 越晚,date 就越大。除非两个月间隔的是整数月,否则会出现小数
          例如: SELECT ename, ADD_MONTHS(hiredate, 20*12) as "纪念日" FROM emp_rs

  • NEXT_DAY(date, char) --- 返回date日期数据的下一个周几,周几是由参数char来决定。返回的是离现在的日期还没到的最近的周几。
          注意:数字1-7表示周日-周六
          例如:SELECT NEXT_DAY(SYSDATE,1) FROM dual

  • LEAST(expr1[,expr2,expr3…]) --- 返回最小的值
          例如:SELECT LEAST(SYSDATE, TO_DATE('2008-03-02','YYYY-MM-DD')) FROM dual

  • GREATEST(expr1[,expr2,expr3…]) --- 返回最大的值
          注意:参数类型必须一致,不过若第 2 个以及后面的参数能够转换成前一个类型,那么可以比较,否则会报错。
          例如:SELECT GREATEST(SYSDATE, TO_DATE('2008-03-02','YYYY-MM-DD')) FROM dual

  • EXTRACT(date FROM datetime) --- 从参数 datetime中提取参数 date 指定的数据。
          例如:SELECT ename, hiredate FROM emp_rs WHERE EXTRACT(YEAR FROM hiredate) = 1981



四、空值类型:NULL
        NULL 条件查询:
  • 当判断一个字段的值是否为 NULL 时,不能使用“ =”判断,而是使用 IS NULL 或者IS NOT NULL 。

     NULL 的运算:
  • NULL 与字符串连接,等于什么都没干
  • NULL 与数字运算,结果还是 NULL

     空值函数:
  • NVL(expr1,exp2) --- 将 NULL转换为非 NULL 值。若expr1 为 null,则函数返回 exp2, 否则就返回expr1 的值。
          例如: SELECT ename, sal, comm,sal+NVL(comm,0) FROM emp_rs

  • NVL2(exp1,exp2,exp3) --- 用来判断 exp1 是否为NULL ,如果不是,返回 exp2 ,如果是NULL ,返回 exp3。
          例如:SELECT ename, NVL2(comm,'有奖金','没奖金') as "奖金情况" FROM emp_rs



五、零碎知识
DUAL( 伪表) ,为了满足 SELECT 语法要求使用,当我们查询的数据不来自任何一张表时,可以使用伪表代替 FROM 字句中的内容,伪表仅会查询出一条记录。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值