ORACLE-有关TIMESTAMP的查询

时间:2014-01-12 08:14:42

标签: oracle date-arithmetic

select flightdate from flight;
FLIGHTDATE

01-DEC-12 10.09.01.340000 AM
02-DEC-12 10.09.01.340000 AM
02-DEC-12 10.09.01.340000 AM
03-DEC-12 10.09.01.340000 AM
05-DEC-12 10.09.01.340000 AM
03-DEC-12 10.09.01.340000 AM
04-DEC-12 10.09.01.340000 AM
06-DEC-12 10.09.01.340000 AM

现在我想获得flightdate> 03-DEC-12

我已将查询编写为

select flightdate from flight where flightdate>'03-DEC-12'

输出:

03-DEC-12 10.09.01.340000 AM
05-DEC-12 10.09.01.340000 AM
03-DEC-12 10.09.01.340000 AM
04-DEC-12 10.09.01.340000 AM
06-DEC-12 10.09.01.340000 AM

我甚至得到了03-DEC-12

2 个答案:

答案 0 :(得分:3)

您将从12月3日开始收到活动,因为03-DEC-12被解释为2012-12-03T00:00:00,而午夜后10小时的活动确实匹配。

如果您想要从第二天开始的活动,请使用

SELECT *
FROM flight 
WHERE FLIGHTDATE >= DATE '2012-12-04'
-- or FLIGHTDATE >= (DATE '2012-12-03') + 1

您还可以使用TRUNC function将日期时间截断为日期,但这可能会使查询无法进行查询:

SELECT *
FROM flight
WHERE TRUNC(FLIGHTDATE) > TO_DATE('03-DEC-12', 'DD-MON-YY')

答案 1 :(得分:0)

  • 此处您的Flightdate列包含时间戳(03-DEC-12 10.09.01.340000)。

  • 在where where子句中,您提供了flightdate> '03 -DEC-12'。

  • Oracle将您提供的日期视为flightdate> '03 -DEC-12 00.00.00.000'

  • 因此,当您处理日期时,最好使用TO_DATE()函数。