我有一个称为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-1
或Create_Date=CURRENT_DATE-1
来过滤昨天的日期。或使用Create_Date>=SYSDATE
或Create_Date>=CURRENT_DATE
查看大于或等于今天的日期。
有人可以帮忙吗?
答案 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'