从特定日期提取行(时间转换)

时间:2017-06-13 10:18:00

标签: oracle datetime time oracle11g

我的列包含如下日期:

'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');

我的行数为零。

1 个答案:

答案 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敏感月份缩写,这可能会在某些时候导致您的问题。)