首页 > 解决方案 > 数据类型为 CHAR(23 BYTE) 的 2 个日期之间的 Oracle 差异

问题描述

如何在几分钟内找到以下 2 个日期之间的差异,两种数据类型都是使用 SQL 的 CHAR

2019-10-31 10:23:05.927 
2019-10-30 11:20:05.500

标签: sqloracledatedatetimeselect

解决方案


您可以使用to_date()将两个字符串都转换为dates(忽略毫秒部分),然后减去它们。这为您提供了一个数值,该数值将日期之间的差异表示为天数,然后您可以将其转换为小时:

(
    to_date(substr(col1, 1, 19), 'yyyy-mm-dd hh24:mi:ss')
    - to_date(substr(col2, 1, 19), 'yyyy-mm-dd hh24:mi:ss')
) * 24 * 60

如果您确实想包含毫秒部分,那么它会变得很长。您可以使用 s 将字符串转换为timestamps to_timestamp(),然后减去它们;这会产生一个间隔,您需要从中提取每个部分。

extract(hour from 
    to_timestamp(col1, 'yyyy-mm-dd hh24:mi:ss.ff3')
    - to_timestamp(col1, 'yyyy-mm-dd hh24:mi:ss.ff3')
) * 60
+ extract(minute from 
    to_timestamp(col1, 'yyyy-mm-dd hh24:mi:ss.ff3')
    - to_timestamp(col1, 'yyyy-mm-dd hh24:mi:ss.ff3')
)
+ extract(second from 
    to_timestamp(col1, 'yyyy-mm-dd hh24:mi:ss.ff3')
    - to_timestamp(col1, 'yyyy-mm-dd hh24:mi:ss.ff3')
) / 60

推荐阅读