Oracle SQL - 两个日期之间的变量

时间:2013-09-06 16:31:23

标签: sql oracle

我无法弄清楚为什么这段代码不起作用。它有点倒退,这可能让我感到困惑。

SELECT * FROM 
(  
 SELECT   
 TO_CHAR(FTPRITIN.start_date, 'DD-MON-YY') start_date,
 TO_CHAR(FTPRITIN.end_date, 'DD-MON-YY') end_date 
 FROM ftpritin 
)
WHERE :VARIABLE BETWEEN start_date AND end_date

我也试过

SELECT * FROM 
(  
 SELECT   
 TO_CHAR(FTPRITIN.start_date, 'DD-MON-YY') start_date,
 TO_CHAR(FTPRITIN.end_date, 'DD-MON-YY') end_date 
 FROM ftpritin 
)
WHERE start_date > :VARIABLE AND end_date < :VARIABLE

但它似乎不起作用。查询会运行,但会将数据完全扫描到范围之外。

我需要的是获取变量落在start_date和end_date之间的数据行。有任何想法吗?任何帮助深表感谢。

ANSWER

仅供参考 - 对于那些想知道为什么这么简单的问题如此困难的人 - 或者那些有类似问题的人......

该字段是 TIMESTAMP ,而不是日期字段。我通过运行

来解决这个问题

DESC table_name

然后我只是做了一个快速的substr to_date来修复它

to_date(substr(start_date, 1, 9))

这允许我按日期过滤

WHERE to_date(substr(start_date, 1, 9)) <= to_date(:VARIABLE, 'DD-MON-YY')...

感谢大家的帮助。

(少于10个代表,所以我无法回答我自己的帖子)

1 个答案:

答案 0 :(得分:2)

您的日期格式顺序错误。但是,为什么你不能这样做:

SELECT * 
FROM ftpritin 
WHERE start_date > :VARIABLE AND end_date < :VARIABLE

:VARIABLE是日期/日期时间?或者,如果它必须是一个字符串:

SELECT * 
FROM ftpritin 
WHERE start_date > to_date(:VARIABLE, <right format goes here>) AND
      end_date < to_date(:VARIABLE, <right format goes here>)