You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Oracle SQL中Timestamp转Date:将特定格式时间戳转换为目标日期格式

搞定Oracle Timestamp转指定格式Date的问题

嘿,针对你要把格式为07-JUN-17 11.00.00.000000000 AM的Timestamp类型值转成07-JUN-17 11.00.00 AM格式的Date类型需求,我给你整理了两种实用的方法:

先提前说个关键点:Oracle的DATE类型本身是不存储显示格式的,它是后台的数值型存储。我们要做的核心是去掉Timestamp里的纳秒部分,转换成Date类型,之后如果需要固定显示格式,再用格式化函数调整就行。

方法1:用TRUNC截断纳秒(简单直接)

TRUNC函数可以直接把Timestamp截断到秒级,然后转成Date就搞定了:

SELECT CAST(TRUNC(your_timestamp_column, 'SS') AS DATE) AS converted_date
FROM your_table;
  • TRUNC(..., 'SS')会把Timestamp后面那串长长的纳秒全部清零,只保留到秒
  • CAST把处理后的Timestamp转成Date类型

要是你需要确保显示出来就是07-JUN-17 11.00.00 AM这个样式,就配合TO_CHAR函数:

SELECT TO_CHAR(CAST(TRUNC(your_timestamp_column, 'SS') AS DATE), 'DD-MON-RR HH.MI.SS AM') AS formatted_date
FROM your_table;

注意哈,TO_CHAR返回的是字符串类型,如果只需要Date类型的字段,第一个语句就够用了,显示格式可以通过客户端的NLS设置或者TO_CHAR来控制。

方法2:字符串中转法(精准控格式)

先把Timestamp转成不带纳秒的字符串,再转成Date类型,这种方法能彻底避开NLS设置的影响:

SELECT TO_DATE(TO_CHAR(your_timestamp_column, 'DD-MON-RR HH.MI.SS AM'), 'DD-MON-RR HH.MI.SS AM') AS converted_date
FROM your_table;
  • 第一步TO_CHAR把Timestamp格式化为你想要的、去掉纳秒的字符串
  • 第二步TO_DATE把这个字符串转成Date类型

小提醒

  • 记得确认你的Oracle会话的NLS_DATE_FORMATNLS_TIMESTAMP_FORMAT设置和你的格式匹配,或者像上面这样在函数里明确写格式掩码,避免转换出错
  • 格式里的RR是用来处理两位年份的,会根据当前年份自动推断世纪(比如17会被识别为2017)

内容的提问来源于stack exchange,提问作者jayanth

火山引擎 最新活动