如何在oracle中区分日期

时间:2015-06-23 17:30:03

标签: sql oracle

我在表中有一个varchar2列open_time。现在我需要找出open_time和sysdate之间的差异大于180的记录。

3 个答案:

答案 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吗?