Oracle数据库中常用到日期时间的操作,而日期时间的转换是其中重要的一个操作,本文将介绍如何将Oracle中的日期时间类型转换为日期类型。
首先,我们来看看一个例子。
SELECT TO_DATE('2015-07-01 10:10:10', 'yyyy-mm-dd hh24:mi:ss') FROM DUAL;
上面的SQL语句输出结果为:
2015-07-01
这里我们使用了Oracle的内置函数TO_DATE将一个字符串类型的日期转换为日期类型。
TO_DATE函数的第一个参数为待转换的日期字符串,第二个参数为转换格式化模板。
接下来看另外一个例子:
SELECT TO_DATE('2015-07-01', 'yyyy-mm-dd') FROM DUAL;
上面的SQL语句输出结果为:
2015-07-01
这个例子中的日期字符串只包含年月日,没有具体的时间,因此我们在第二个参数中只需要指定日期格式化模板就可以了。
如果我们想将一个包含时分秒的日期字符串转换为时间戳(即从1970年1月1日起的秒数),可以使用如下的SQL语句:
SELECT TO_TIMESTAMP('2015-07-01 10:10:10', 'yyyy-mm-dd hh24:mi:ss') FROM DUAL;
上面的SQL语句输出结果为:
01-JUL-15 10.10.10.000000000 AM
这个例子中我们使用Oracle的内置函数TO_TIMESTAMP将一个包含时分秒的日期转换为时间戳类型。
TO_TIMESTAMP函数的第一个参数为待转换的日期字符串,第二个参数为转换格式化模板。
在Oracle 12c之前版本中,内置函数TO_TIMESTAMP并不支持毫秒级别的时间戳转换,但可以使用TO_TIMESTAMP函数与CAST函数结合实现毫秒级别的时间戳转换。
下面的SQL语句将一个包含毫秒级别的时间戳转换为Oracle可以识别的日期时间格式:
SELECT CAST(TO_DATE('1970-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') + (1467374835221/86400000) AS TIMESTAMP) FROM DUAL;
上面的SQL语句输出结果为:
2016-07-01 13:00:35.221000000
其中CAST函数将日期类型转换为时间戳类型,TO_DATE函数将Unix时间戳的起始时间1970-01-01 00:00:00转换为日期类型,1467374835221/86400000的值就是毫秒级别时间戳除以一天的秒数,计算得到的结果再加上Unix时间戳的起始时间,就是要转换的日期时间。
总之,日期时间的转换常常用到,而Oracle自带的内置函数可以方便地进行日期时间转换,帮助我们更好地管理数据。