Oracle SQL中的时间戳记日期

时间:2018-06-20 17:08:20

标签: sql oracle oracle11g

我有一个称为Create_Date的列,其数据格式为19-JUN-18 10.27.00.000000000 PM,数据类型为TIMESTAMP(6)

我试图查看日期范围(例如昨天的日期)或Create_Date中的两个日期之间,而不使用TO_DATE(TO_CHAR(P.CREATE_DATE_TIME,'dd/mon/yy'))并将值输入为'19-JUN-18'

我想使用Create_Date=SYSDATE-1Create_Date=CURRENT_DATE-1来过滤昨天的日期。或使用Create_Date>=SYSDATECreate_Date>=CURRENT_DATE查看大于或等于今天的日期。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

您可以使用TRUNC

SELECT *
FROM tab
WHERE Create_Date >= TRUNC(SYSDATE,'DD')  -- -1

-- or between to dates (using date literals)
WHERE Create_Date >= DATE 'yyyy-mm-dd'
   AND Create_Date < DATE 'yyyy-mm-dd'

答案 1 :(得分:2)

由于是时间戳记,为了清楚起见,我将截断的(到午夜)当前日期转换为时间戳记。即使您将其保留为日期,Oracle也会在该列上使用索引,但是将其明确显示也没有什么害处:

where create_date >= cast(trunc(sysdate) as timestamp)

The trunc() function默认为截断至午夜;如果愿意,您可以明确地将'DD'作为第二个参数(为了更加清楚,尽管有些人将其视为杂音)。

如果您想要一个范围,请说昨天:

where create_date >= cast(trunc(sysdate) - 1 as timestamp)
and create_date < cast(trunc(sysdate) as timestamp)

如果您要指定其他日期,则可以使用时间戳文字,例如查看五月的一切:

where create_date >= timestamp '2018-05-01 00:00:00'
and create_date < timestamp '2018-06-01 00:00:00'