Oracle笔记(五)单行函数(二)
UNC(-903.53567), TRUNC(903.53567,2), TRUNC(-90353567,-1) FROM dual;
TRUNC(903.53567) TRUNC(-903.53567) TRUNC(903.53567,2) TRUNC(-90353567,-1)
---------------- ----------------- ------------------ -------------------
903 -903 903.53 -90353560
范例:取模操作
SELECT MOD(10,3) FROM dual;
MOD(10,3)
----------
1
以上的三个主要的数学函数,在学习Java中也会有相匹配的内容。
三、日期函数
如果现在要想进行日期的操作,则首先有一个必须要解决的问题,就是如何取得当前的日期,这个当前日期可以使用“SYSDATE”取得,代码如下:
SELECT SYSDATE FROM dual;
除了以上的当前日期之外,在日期中也可以进行若干计算:
日期 + 数字 = 日期,表示若干天之后的日期;
SELECT SYSDATE + 3,SYSDATE + 300 FROM dual;
日期 – 数字 = 日期,表示若干天前的日期;
SELECT SYSDATE - 3,SYSDATE - 300 FROM dual;
日期 – 日期 = 数字,表示的是两个日期间的天数,但是肯定是大日期 – 小日期;
范例:求出每个雇员到今天为止的雇佣天数
SELECT ename,hiredate,SYSDATE-hiredate FROM emp;
而且很多的
编程语言之中,也都会提出一种概念,日期可以通过数字表示出来。
除了以上的三个公式之外,也提供了如下的四个操作函数:
LAST_DAY(日期):求出指定日期的最后一天;
范例:求出本月的最后一天日期
SELECT LAST_DAY(SYSDATE) FROM dual;
NEXT_DAY(日期,星期数):求出下一个指定星期X的日期;
范例:求出下一个周一
SELECT NEXT_DAY(SYSDATE,'星期一') FROM dual;
ADD_MONTHS(日期,数字):求出若干月之后的日期;
范例:求出四个月后的日期
SELECT ADD_MONTHS(SYSDATE,4) FROM dual;
MONTHS_BETWEEN(日期1,日期2):求出两个日期之间所经历的月份;
范例:求出每个雇员到今天为止的雇佣月份
SELECT ename,hiredate,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)) FROM emp;
在所有的开发之中,如果是日期的操作,建议使用以上的函数,因为这些函数可以避免闰年的问题。
www.2cto.com
四、转换函数
现在已经接触到了Oracle
数据库之中的三种数据:数字(NUMBER)、字符串(VARCHAR2)、日期(DATE),转换函数的主要功能是完成这几种数据间的互相转换操作,一共有三种转换函数:
TO_CHAR(字符串 | 列,格式字符串):将日期或者是数字变为字符串显示;
TO_DATE(字符串,格式字符串):将字符串变为DATE数据显示;
TO_NUMBER(字符串):将字符串变为数字显示;
a、TO_CHAR()函数
在之前查询过当前的系统日期时间:
SELECT SYSDATE FROM dual;
这个时候是按照“日-月-年”的格式显示,很明显这种显示格式不符合正常的思路,正常是“年-月-日”,所以这种情况下可以使用TO_CHAR()函数,但是使用此函数的话需要一些格式字符串:年(yyyy),月(mm),日(dd)。
SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd'),TO_CHAR(SYSDATE,'yyyy') year, TO_CHAR(SYSDATE,'mm') month, TO_CHAR(SYSDATE,'dd') day FROM dual;
TO_CHAR(SY YEAR MO DA
---------- ---- -- --
2012-08-12 2012 08 12
但是这个时候的显示数据之中可以发现会存在前导0,如果要想消除掉这个0的话,可以加入一个“fm”。
SELECT TO_CHAR(SYSDATE,'fmyyyy-mm-dd') day FROM dual;
DAY
----------
2012-8-12
正常人都加0,所以这个标记知道就行了,可是在
Oracle之中,DATE里面是包含了时间的,但是之前的代码没有显示出时间,要想显示时间则需要增加标记:
SELECT TO_CHAR(SYSDATE,'fmyyyy-mm-dd hh24:mi:ss') day FROM dual;
DAY www.2cto.com
-------------------
2012-8-12 16:13:38
一定要注意,使用TO_CHAR()函数之后,所有的内容都是字符串,不再是之前的DATE型数据,TO_CHAR()函数也可以用于数字的格式化上,这个时候每一个“9”表示一位数字的概念,而不是数字9的概念。
SELECT TO_CHAR(89078907890,'L999,999,999,999,999') FROM dual;
TO_CHAR(89078907890,'L999,999,
------------------------------
¥89,078,907,890
其中的字母“L”,表示的是“Local”的含义,即:当前的所在的语言环境下的货币符号。
b、TO_DATE()函数
此函数的主要功能是将一个字符串变为DATE型数据。
SELECT TO_DATE('1989-09-12','yyyy-mm-dd') FROM dual;
TO_DATE('1989-
--------------
12-9月 -89
一般此函数在更新数据库的时候使用较多;
c、TO_NUMBER()函数:基本不用
TO_NUMBER()函数一看就知道是将字符串变数字的:
SELECT TO_NUMBER('1') + TO_NUMBER('2') FROM dual;
但是在Oracle之中真的很智能,所以以上的功能不使用TO_NUMBER()也可完成:
SELECT '1' + '2' FROM dual;
SQL> SELECT TO_NUMBER('1') + TO_NUMBER('2') FROM dual;
TO_NUMBER('1')+TO_NUMBER('2')
-----------------------------
3
SQL> SELECT '1' + '2' FRO