我在表中有一个varchar2列open_time。现在我需要找出open_time和sysdate之间的差异大于180的记录。
答案 0 :(得分:3)
您可以使用TO_DATE
函数将varchar2强制转换为日期。您需要指定的格式取决于存储日期的格式。
一旦您获得了日期值,就可以从sysdate
中减去它以获得(小数)天数。因此,要查看您的日期是否超过180天,您可以写:
WHERE sysdate - ThatDateValue > 180
换句话说,:
WHERE sysdate - TO_DATE(open_time, 'FORMAT') > 180
其中FORMAT是与您的日期匹配的格式。我无法提供,因为您没有指定任何示例日期,但如果您查看TO_DATE
documentation,则可以详细记录可能的格式参数。
但是作为一个建议:在varchar2
中存储日期是一个坏主意。有date
。每次不必将文本转换为日期更有效,它可以防止存储非法日期,并且可以更容易地进行日期计算。如果有机会,我可以用日期列替换varchar2列。
答案 1 :(得分:0)
如果你减去两个日期,你会得到一个数字,即两个日期之间的天数,所以你可以从sysdate中减去open_time,然后检查结果是否大于180
离。
SELECT
--COLUMNS
FROM
--TABLES
WHERE
(SYSDATE - open_time) > 180
错过了varchar部分,但另一个答案提到了TO_DATE函数,这是一个简单的修复。只是在open_time周围抛出一个TO_DATE
答案 2 :(得分:0)
如果open_time是几天,那看起来很容易。
SELECT * FROM myTable
WHERE open_time > 180
如果是约会,请尝试使用datediff吗?