Oracle日期函数
Oracle采用date类型表示日期时间,这是一个7字节的固定宽度的数据类型,有7个属性,包括:世纪、世纪中哪一年、月份、月中的哪一天、小时、分钟和秒。本文中把date类型称为日期时间类型,简称日期。
对编程语言来说,日期是用字符串来显示和书写的,如果设置了NLS_DATE_FORMAT环境变量,Oracle可以自动的对日期和字符串进行转换,但是,程序员更多的是采用to_char和to_date两个函数对日期和字符串进行转换。
一、把日期转换为字符串
to_char函数把日期转换成字符串,一般用于 select 和 from 之间的字段列表中的日期输出,语法如下:
1 | to_char(日期,格式) |
日期格式用字符串来表达,格式控制标识如下,加粗显示的是常用的格式:
d:一周中的星期几。
day:天的名字,使用空格填充到9个字符。
dd:月中的第几天。
ddd:年中的第几天。
dy:天的简写名。
iw:ISO标准的年中的第几周。
iyyy:ISO标准的四位年份。
yyyy:四位年份。
yyy,yy,y:年份的最后三位,两位,一位。
hh:小时,按12小时计。
hh24:小时,按24小时计。
mi:分。
ss:秒。
mm:月。
mon:月份的简写。
month:月份的全名。
w:该月的第几个星期。
ww:年中的第几个星期。
举例:
二、把字符串转换日期
to_date函数把字符串转换成日期,一般用于insert、update和where之后的条件中的日期输入,语法如下:
1 | to_date(字符串表示的日期,格式) |
日期格式用字符串来表达,与to_char函数相同。
先创建一个用于测试的表tt。
1 | create table tt ( c1 date); |
举列:
在update语句中把字符串转换为日期。
在where条件中把字符串转换为日期。
三、日期运算
Oracle数据库提供了多种对日期加减的计算方法。
为了方便日期的显示,先设置好NLS_DATE_FORMAT环境变量,这个环境变量的用法在本文的“四、日期环境变量”章节中介绍。
1 | export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss" |
1、直接加减
可以在日期上进行加减一个小数(单位是天)得到一个新的时间。
1)取当前时间和一天后的时间。
2)取当前时间和一小时后的时间。
3)获取当前时间和一秒后的时间。
2、add_months函数
对日期直接加减的方式不用于月的加减,因为每月的天数不一样,例如2020-01-01,加上30天之后是2020-01-31,不是2020-02-01。如果希望把日期加上一个完整的月(不论月的大小),可以用add_months函数。
从上面的例子可以看出,月有大有小:1)如果下月的天小于本月的天,add_months后取下月的最后一天;2)本月的最后一天加上一个月,就是下个月的最后一天。
3、last_day函数
last_day函数得到日期所属月份最后一天的时间。
4、其它的日期函数
Oracle还提供了其它的日期计算的函数,如months_between、next_day、numtodsinterval和numtoyminterval等,在我看来,这些函数很烦人,实在没有意义,就不介绍了。
四、日期环境变量
NLS_DATE_FORMAT环境变量指定日期的输入和输入格式,如果字符串的格式与NLS_DATE_FORMAT指定的格式相同,Oracle可以自动转换,不需要to_char和to_date函数。
1 | export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss" |
1 | export NLS_DATE_FORMAT="yyyymmddhh24miss" |
从上图的运行结果看出,修改NLS_DATE_FORMAT环境变量后,如果输入的日期格式不符,Oracle无法识别。
五、版权声明
C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。
来源:C语言技术网(www.freecplus.net)
作者:码农有道