我理解查询日期会因为比较字符串到日期而失败,这可能会导致问题。
Oracle 11.2 G. Unicode DB NLS_DATE_FORMAT DD-MON-RR
select * from table where Q_date='16-Mar-09';
可以通过
解决select * from table where trunc(Q_date) = TO_DATE('16-MAR-09', 'DD-MON-YY');
我不知道的是为什么这样做。
select* from table where Q_date='07-JAN-08';
如果有人能够详细说明或纠正我的心态。 感谢
答案 0 :(得分:2)
Oracle 确实允许日期文字,但它们取决于安装(特别是DATE
的值,如here所述)。因此,没有通用格式将单个字符串解释为日期(除非您使用where Q_date = '07-JAN-08'
关键字)。
默认格式为DD-MM-YY,它似乎是服务器的格式。所以,你的陈述:
DATE
使用此格式进行解释。
我更喜欢使用ISO标准YYYY-MM-DD格式的where Q_Date = DATE '2008-01-07'
关键字:
(^"[^"]*)(?:"([^"]*)")?([^"]*?")
答案 1 :(得分:0)
如果没有返回任何行:
reinterpret_cast
但确实会看到数据:
select * from table where Q_date='16-Mar-09';
然后你的行的时间不是午夜。在本世纪的这一点上,DD-MON-RR和DD-MON-YY是等价的,两者都将09视为2009年,因此日期部分是正确的。但是第一个只会找到时间是午夜的行,而第二个是通过select * from table where trunc(Q_date) = TO_DATE('16-MAR-09', 'DD-MON-YY');
剥离时间,这意味着两边的日期都是午夜,因此相等。
因为这也找到了数据:
trunc
...那时你在那天的午夜有行。您可能也有其他时间的行,因此使用trunc版本检查计数可能会有用。
您可以查看实际拥有的时间:
select* from table where Q_date='07-JAN-08';
如果您确实希望在一天内捕获所有时间,则可以使用范围:
select to_char(q_date, 'YYYY-MM-DD HH24:MI:SS') from table;
虽然听起来好像你希望所有时间都是午夜,这可能表明存在数据问题。