TO_CHAR 在比较两个时间戳时只考虑日期?

TO_CHAR only considering dates while comparing two time stamps?

在下面的查询条件中失败,但逻辑上它应该通过。 to_char有问题吗??

SELECT data
FROM table1
WHERE
TO_CHAR(TO_DATE(value1, 'DD/MM/RRRR HH24:MI:SS'), 'DD/MM/RRRR HH24:MI:SS') <= 
   TO_CHAR( SYSDATE, 'DD/MM/RRRR HH24:MI:SS')
 AND TO_CHAR(TO_DATE(value2, 'DD/MM/RRRR HH24:MI:SS'), 'DD/MM/RRRR HH24:MI:SS') >=
    TO_CHAR( SYSDATE, 'DD/MM/RRRR HH24:MI:SS');

value1='02/07/2014 12:30:10'
value2='06/08/2015 09:57:33'

在这两种情况下,它只检查日期,即 02<=07(第 7 天是今天的日期)。无论月份如何,第一个条件都得到满足,year.if 我将 value1 更改为 '15/08/2014 12:30:10' 它失败了。与第二个条件相同。

你必须使用 TO_TIMESTAMP 而不是 TO_DATE:

SELECT data
FROM table1
WHERE  
TO_CHAR(TO_TIMESTAMP(value1, 'DD/MM/RRRR HH24:MI:SS'), 'DD/MM/RRRR HH24:MI:SS') <= 
   TO_CHAR( SYSDATE, 'DD/MM/RRRR HH24:MI:SS')
  AND TO_CHAR(TO_TIMESTAMP(value2, 'DD/MM/RRRR HH24:MI:SS'), 'DD/MM/RRRR HH24:MI:SS') >=
    TO_CHAR( SYSDATE, 'DD/MM/RRRR HH24:MI:SS');

为什么要将日期作为字符串进行比较?这也回避了为什么首先将日期存储为字符串的问题。您应该使用内置类型存储 date/times。

试试这个:

SELECT data
FROM table1
WHERE TO_DATE(value1, 'DD/MM/RRRR HH24:MI:SS') <= sysdate AND
      TO_DATE(value2, 'DD/MM/RRRR HH24:MI:SS') >= sysdate;

您的问题可能是您比较的是字符串,而不是日期。而且您使用的格式 DD/MM/YYYY 不会以相同的方式进行比较。事实上,这就是为什么在字符串中存储 date/time 值时应该只使用 YYYY-MM-DD 的 ISO 格式(反正我在大多数情况下不推荐这样做)。

如果您的值已经以正确的类型存储,那么您可以这样做:

SELECT data
FROM table1
WHERE value1 <= sysdate AND
      value2 >= sysdate;

如果这些是带时区的时间戳,那么您可以使用 SYSTIMESTAMP 而不是 SYSDATE

经过大量谷歌搜索,我终于找到了解决方案。以下查询对我有用 :) :)

SELECT留言 从表 1 WHERE TO_TIMESTAMP(value1, 'DD/MM/RRRR HH24:MI:SS') <= CAST(SYSDATE AS TIMESTAMP) AND TO_TIMESTAMP(value2, 'DD/MM/RRRR HH24:MI:SS') >= CAST(SYSDATE AS TIMESTAMP);

value1='02/07/2014 12:30:10' value2='06/08/2015 09:57:33'