我的列包含如下日期:
'03 -DEC-15 08.27.26.869000000 AM';
我试图从03-DEC-15获取所有行。 当我这样做时:
select * from tableX where colT = '03-DEC-15';
--or
select * from tableX where colT = TO_TIMESTAMP ('03-DEC-15','dd-mon-rr');
--or
select * from tableX where colT = to_date('03-DEC-15','dd-mon-rr');
我的行数为零。
答案 0 :(得分:3)
正如@BriteSponge所提到的,你的列值的时间不是午夜,因此将它们与正好是午夜的变量进行比较不会发现匹配。
您可以按truncating them忽略列值的时间部分:
select * from tableX where trunc(colT) = date '2015-12-03';
会阻止使用该列的任何索引,或者最好使用比较右侧的范围:
select * from tableX
where colT >= timestamp '2015-12-03 00:00:00'
and colT < timestamp '2015-12-04 00:00:00';
(您可以使用between
,但由于这是包容性的,您可能会丢失或重复计算数据,因此我发现这种语法更明确,更不明确。我还使用datetime literals代替to_date()
以避免含糊不清;您使用2位数年份和NLS敏感月份缩写,这可能会在某些时候导致您的问题。)