【发布时间】:2016-09-06 09:03:42
【问题描述】:
我在 orcle db 中有一个日期值 - 08.06.16 19:56:20,473000000。
CR_DATE - TIMESTAMP(6)
我需要将日期截断到前一小时的开头并转换为纪元格式。例如,如果日期如上所述,那么它应该四舍五入到 08.06.16 19:00:00,然后转换为纪元,这应该给我最终的 o/p 为 1465412400
我可以使用以下查询更改为纪元格式,但四舍五入到最近的时间不起作用。
ROUND((CAST(CR_DATE AS DATE) - DATE '1970-01-01') * 24 * 60 * 60, 0) AS creationDate
如果我使用
select CR_DATE,TRUNC(CREATION_DATE, 'HH24') AS creationDate
然后我得到的值为 08.06.16,HH:MM 详细信息被截断。
DB中设置的NLS_TIMESTAMP_FORMAT是DD.MM.RR HH24:MI:SSXFF
有人可以在不更改 NSL 格式的情况下帮我解决这个问题吗?
【问题讨论】:
-
您说“四舍五入到最近的小时”,但您的示例似乎表明您想要截断到前一小时的顶部。两者哪个是正确的。
trunc(creation_date, 'HH24')将返回截断为小时的date。您的客户端可能不会显示时间部分,但它仍然存在。 -
感谢您对此进行调查。是的,它被截断到前一小时的顶部,实际上是最近的一小时。为错误道歉。但是我如何也随着时间的推移获得价值。我不希望时间部分完全发出。
-
“实际上到最近的时间”是什么意思?听起来我们又回到了舍入而不是截断
-
我已经更新了这个问题。它被截断到前一小时。这是评论中的错字,它不允许我更改它并保存回来。