【发布时间】:2016-09-20 18:49:04
【问题描述】:
我在列中有以下“时间戳”
Mon Aug 10 12:24:46 CDT 2016
所以要转换为日期,我正在执行以下操作。
select * from
(select TO_DATE(SUBSTR(t.timestamp,9,2) || '-' || SUBSTR(t.timestamp,5,3) ||
'-' || SUBSTR(t.timestamp,27,2), 'DD-MON-YY') from table t where
t.LENGTH(TRIM(t.timestamp)) = 28 as date) where date <= sysdate;
这样做的原因是,“Oracle sysdate”以以下格式返回当前日期
20-SEP-16
所以为了比较oracle sysdate,我使用的是上面的方法。
有没有更好的方法来做到这一点,我知道在 select 语句中使用一组子字符串效率很低,并且由于我的“时间戳”值太长,我无法转换为 ORACLE 日期。
我使用 oracle 11 作为我的数据库。任何帮助表示赞赏。
【问题讨论】:
-
如何切换到原生时间戳格式并将当前格式的计算列作为文本?
-
附注:默认日期格式是可配置的,不可依赖。
-
@KamilG。要切换到原生时间戳格式,我们仍然需要对时间戳进行一些子字符串转换
-
@ylnsagar 对不起,我不明白你的问题。时间戳很容易被截断为日期。
-
列是什么数据类型?它是正确的“带有时区的时间戳”还是 varchar2 或类似的字符串类型?另外,您需要什么输出...您只需要与当前日期/时间进行比较吗?或者,实际上,您似乎正在从时间戳中截断时间,这是您的要求吗?如果时间戳是 22:30 而当前时间是 14:30 呢?您确实意识到“SYSDATE”有一个时间组件,对吧?