Sql 如何在Oracle中从日期中提取毫秒?
我有完整的日期(时间)。 但我只需要从日期算起的毫秒 请告诉我一行解决方案 例如:Sql 如何在Oracle中从日期中提取毫秒?,sql,oracle11g,timestamp,Sql,Oracle11g,Timestamp,我有完整的日期(时间)。 但我只需要从日期算起的毫秒 请告诉我一行解决方案 例如:date=2016/03/16 10:45:04.252 我想要这个答案=252 我尝试使用这个查询 SELECT ADD_MONTHS(millisecond, -datepart('2016/03/16 10:45:04.252', millisecond), '2016/03/16 10:45:04.252') FROM DUAL; 但我没有成功 我有完整的日期(有时间) 这只能使用时间戳来完成。
date=2016/03/16 10:45:04.252
我想要这个答案=252
我尝试使用这个查询
SELECT ADD_MONTHS(millisecond, -datepart('2016/03/16 10:45:04.252', millisecond),
'2016/03/16 10:45:04.252') FROM DUAL;
但我没有成功
我有完整的日期(有时间)
这只能使用时间戳来完成。尽管Oracle的date
确实包含时间,但它只存储秒,而不是毫秒
要从时间戳中获取小数秒数,请使用To_char()
并将其转换为数字:
select to_number(to_char(timestamp '2016-03-16 10:45:04.252', 'FF3'))
from dual;
纯代码答案虽然正确,但对于理解解决方案并没有真正的帮助。请考虑添加一些文本来解释你所做的和代码意味着什么。谢谢你的努力。我得到了我的答案。这是最干净的答案。关于<代码>摘录(时间戳值,毫秒)< /代码>?(编辑:啊,这只是在“Oracle大数据”中,而不是Oracle数据库,即使是在21c版中,这太疯狂了…)我注意到这在Oracle 11g中起作用:SELECT(timestamp_value-CAST(ValidFrom AS timestamp(0))AS ms FROM tableName
但是ms
的类型仍然是timestamp(n)
。
SELECT
TRUNC((L.OUT_TIME-L.IN_TIME)*24) ||':'||
TRUNC((L.OUT_TIME-L.IN_TIME)*24*60) ||':'||
ROUND(CASE WHEN ((L.OUT_TIME-L.IN_TIME)*24*60*60)>60 THEN ((L.OUT_TIME-L.IN_TIME)*24*60*60)-60 ELSE ((L.OUT_TIME-L.IN_TIME)*24*60*60) END ,5) Elapsed
FROM XYZ_TABLE