LAST_DAY():求出给定日期的最后一天日期。
例:查询连个日期之间相差的月数,sysdate 表示的当前的时间。
SQL> select empno , ename , months_between(sysdate , hiredate) days from emp ; EMPNO ENAME DAYS ----- ---------- ---------- 7369 SMITH 399.772141 7499 ALLEN 397.675367 7521 WARD 397.610850 7566 JONES 396.256012 7654 MARTIN 390.417302 7698 BLAKE 395.288270 7782 CLARK 394 7788 SCOTT 323.707625 7839 KING 388.772141 7844 TURNER 391.062463 7876 ADAMS 322.578592 7900 JAMES 388.223754 7902 FORD 388.223754 7934 MILLER 386.578592 14 rows selected
例:当前日期加上四个月之后的时间。 SQL> select add_months(sysdate , 4) from dual ; ADD_MONTHS(SYSDATE,4) --------------------- 2014/8/9 22:29:57
例:下一个星期三的日期。 SQL> select next_day(sysdate , '星期三') from dual ; NEXT_DAY(SYSDATE,'星期三') -------------------------- 2014/4/16 22:31:23 例:本月的最后一天的日期。 SQL> select last_day(sysdate) from dual ; LAST_DAY(SYSDATE) ----------------- 2014/4/30 22:32:0
转换函数:
to_char():转换为字符串
to_number():转换成数字
to_date():转换成日期
三者之间的相互转化关系:
<-- to_date --> to_number
date =================char ===================number
--> to_char <-- to_char
SQL> select empno , ename ,to_char( hiredate , 'yyyy-mm-dd') from emp ; EMPNO ENAME TO_CHAR(HIREDATE,'YYYY-MM-DD') ----- ---------- ------------------------------ 7369 SMITH 1980-12-17 7499 ALLEN 1981-02-20 7521 WARD 1981-02-22 7566 JONES 1981-04-02 7654 MARTIN 1981-09-28 7698 BLAKE 1981-05-01 7782 CLARK 1981-06-09 7788 SCOTT 1987-04-19 7839 KING 1981-11-17 7844 TURNER 1981-09-08 7876 ADAMS 1987-05-23 7900 JAMES 1981-12-03 7902 FORD 1981-12-03 7934 MILLER 1982-01-23 14 rows selected
转换日期的格式。年:y ,年是四位数字表示 yyyy , 月:m 两位数字 表示 mm , 日: d 两位数字表示 dd 。
数字转换为字符。使用一些符号对数字进行分割,增加可读性。可以使用‘$’和‘L’表示出区域。‘$’表示美元 ,L : local表示以本地的语言进行金额的显示。
SQL> select sal , to_char(sal , '$99,999') from emp ;
SAL TO_CHAR(SAL,'$99,999')
--------- ----------------------
800.00 $800
1600.00 $1,600
1250.00 $1,250
2975.00 $2,975
1250.00 $1,250
2850.00 $2,850
2450.00 $2,450
3000.00 $3,000
5000.00 $5,000
1500.00 $1,500
1100.00 $1,100
950.00 $950
3000.00 $3,000
1300.00 $1,300
14 rows selected
例:to_number() 字符串变为数字的函数
SQL> select to_number('34')+46 from dual;
TO_NUMBER('34')+46
------------------
80
将字符串变为数字,然后进行数字的运算。
例:to_date() 将一个字符串变为date型的数据。
SQL> select to_date('2014-4-9' ,'yyyy/mm/dd') dates from dual ;
DATES
-----------
2014/4/9
通用函数:
NVL() :将一个指定的null值变为指定的内容。空值是无法参与运算的所以把空值替换为 0 。
SQL> select empno ,(nvl(comm , 0 )+sal)*12 annual from emp ; EMPNO ANNUAL ----- ---------- 7369 9600 7499 22800 7521 21000 7566 35700 7654 31800 7698 34200 7782 29400 7788 36000 7839 60000 7844 18000 7876 13200 7900 11400 7902 36000 7934 15600 14 rows selected
decode() 函数,类似与java中的if… else if … else
例:SQL> select decode(1 , 1 ,'数值1' , 2 ,'数值2' , 3 , '数值3') from dual ; DECODE(1,1,'数值1',2,'数值2',3 ------------------------------ 数值1 SQL> select decode(2 , 1 ,'数值1' , 2 ,'数值2' , 3 , '数值3') from dual ; DECODE(2,1,'数值1',2,'数值2',3 ------------------------------ 数值2 SQL> select decode(3 , 1 ,'数值1' , 2 ,'数值2' , 3 , '数值3') from dual ; DECODE(3,1,'数值1',2,'数值2',3 ------------------------------ 数值3通过上面三个查询的结果,我们不难发现,decode()函数的作用和用法。第一个参数为待匹配的值,之后参数两两一组,一组中第一个字符与带匹配字符比较,相同则输出第二个字符。