Sysdate Oracle基于Day运行

时间:2016-04-22 15:40:43

标签: sql oracle date datetime

对于大多数人来说,这可能是一个简单的问题,但我怎样才能让这个面具基于当天运行?

如果有人知道Crystal Reports语法,我们就有了这个,并且它有效{PO_RECEIPTS.DATE_RECEIVED} = currentdate

但是,在转换为Oracle SQL时,我该如何使用标准:TO_CHAR     (SYSDATE,' MM-DD-YYYY HH24:MI:SS')成为范围,这样我们就可以在白天选择所有内容,而不仅仅是与报告运行的第二个相匹配的内容。

今天00:00:00到23:59:59之类的东西呢?

谢谢!

1 个答案:

答案 0 :(得分:3)

如果PO_RECEIPTS.DATE_RECEIVED是一个日期列,其中所有时间都设置为午夜,则可以执行以下操作:

WHERE PO_RECEIPTS.DATE_RECEIVED = TRUNC(sysdate)

如果值有其他时间,则可以使用范围:

WHERE PO_RECEIPTS.DATE_RECEIVED >= TRUNC(sysdate)
AND PO_RECEIPTS.DATE_RECEIVED < TRUNC(sysdate) + 1

默认情况下,截断日期会将时间设置为午夜,因此TRUNC(sysdate)是今天午夜的午夜。对于该范围,您获得的所有记录等于或晚于今天午夜,并且明天不到午夜 - 这是TRUNC(sysdate) + 1给您的,使用正常的Oracle日期时算术。

您真的不想将其转换为TO_CHAR()的字符串;你要么必须将所有列值转换为字符串(这是低效的并且阻止使用索引),要么让字符串(隐式)转换回日期。最好将列值与相同的数据类型进行比较,以减少或避免混淆。