0

我正在尝试查询sum_date WHERE sum_date BETWEEN (sysdate-1) AND (sysdate-30)

在我的SELECT声明中,我尝试过TO_DATE(sum_date, 'DD-MM-YY')并且sysdate

但它会引发错误:

"literal does not match format string."

  • Sum_date存储为varchar20并且看起来像2014-01-07.
  • sysdate看起来像18-SEP-14
4

2 回答 2

3

你的格式是'YYYY-MM-DD',所以:

SELECT *
FROM   my_table
WHERE  TO_DATE(sum_date, 'YYYY-MM-DD') 
       BETWEEN (sysdate - 30) AND (sysdate - 1)
于 2014-09-18T20:37:47.807 回答
0

您还可以更改NLS_DATE_FORMAT会话以满足您的需要:

更改会话集 NLS_DATE_FORMAT = 'YYYY-MM-DD';

创建表 y
  ( y varchar2(10));  
  从 y 中选择 y.*, rowid
;

select * from y where y 介于 sysdate -10000 和 sysdate +100000 之间;
select * from y where to_date(y,'YYYY-MM-DD') 在 '2010-04-01' 和 '2016-04-01' 之间;
于 2016-07-12T16:19:17.463 回答