1、单行函数分类:一行记录,返回一行结果;
1)日期函数介绍
关于上图知识点,我们只关注一个知识点,Oracle中,默认显示的时间格式是“日-月-年”。
当oracle服务端的字符集是simplified chinese_china.al32utf8或simplified chinese_china.zhs16gbk的时候,那么时间格式缺省显示类似于:2003-1月-28。
当oracle服务端的字符集是us7ascii字符集的,缺省的时间格式显示为:28-Jan-2003。
当然,SIMPLIFIEDCHINESE_CHINA.AL32UTF8是最好的,可以兼容多国文字。当然oracle服务端字符集的修改,也不是由我们来决定的,这是DBA的事儿。
查看oracle字符集使用如下网址:
https://blog.csdn.net/Lizi_TT/article/details/89917565
SQL> select userenv('language') from dual; USERENV('LANGUAGE') ---------------------------------------------------- SIMPLIFIED CHINESE_CHINA.AL32UTF8
我的数据库服务端的字符集,如上所示,所以时间格式缺省显示类似于:2003-1月-28。因此在进行数据筛选的时候,也必须采用同样的格式,进行时间筛选,否则会报错。
SQL> select empno,ename,hiredate from emp where hiredate='17-12-1980'; select empno,ename,hiredate from emp where hiredate='17-12-1980' ORA-01843: 无效的月份 SQL> select empno,ename,hiredate from emp where hiredate='17-12月-1980'; EMPNO ENAME HIREDATE ----- ---------- ----------- 7369 SMITH 1980/12/17
假如你不想使用上述时间格式进行时间筛选,可以使用如下代码:改变当前会话窗口的默认时间显示格式。
SQL> alter session set nls_date_format="YYYY-MM-DD HH:MI:SS"; Session altered
接着,我们在利用上述例子,进行时间筛选,效果如下。
SQL> select empno,ename,hiredate from emp where hiredate='17-12月-1980'; select empno,ename,hiredate from emp where hiredate='17-12月-1980' ORA-01861: 文字与格式字符串不匹配 SQL> select empno,ename,hiredate from emp where hiredate='1980-12-17'; EMPNO ENAME HIREDATE ----- ---------- ----------- 7369 SMITH 1980/12/17
注意:上述代码执行后,仅对当前会话窗口有效,也就是说,当关闭了该窗口后,时间显示格式又会恢复默认状态。
2)日期函数运算
日期类型的数据,仅仅支持“+”或者“-”算术运算符。
日期类型的数据,使用“+”算术运算符只能是加减某个数值(该数值会被按照天数来计算),而不能是某个日期。也就是说:日期+日期没有什么意义。
日期类型的数据,使用“-”算术运算符,既可以加减某个数值(该数值会被按照天数来计算),又可以进行日期相减,“日期-日期=天数”。
SQL> select empno,ename,hiredate,(hiredate+90) from emp where hiredate='1980-12-17'; EMPNO ENAME HIREDATE (HIREDATE+90) ----- ---------- ----------- ------------- 7369 SMITH 1980/12/17 1981/3/17 SQL> select empno,ename,hiredate,(hiredate+to_date('1980-12-15')) from emp where hiredate='1980-12-17'; select empno,ename,hiredate,(hiredate+to_date('1980-12-15')) from emp where hiredate='1980-12-17' ORA-00975: 不允许日期 + 日期 -- 可以看出这里报错了:不允许日期 + 日期 SQL> select empno,ename,hiredate,(hiredate-90) from emp where hiredate='1980-12-17'; EMPNO ENAME HIREDATE (HIREDATE-90) ----- ---------- ----------- ------------- 7369 SMITH 1980/12/17 1980/9/18 SQL> select empno,ename,hiredate,(hiredate-to_date('1980-12-15')) from emp where hiredate='1980-12-17'; EMPNO ENAME HIREDATE (HIREDATE-TO_DATE('1980-12-15' ----- ---------- ----------- ------------------------------ 7369 SMITH 1980/12/17
3)常用的日期函数