对于大多数人来说,这可能是一个简单的问题,但我怎样才能让这个面具基于当天运行?
如果有人知道Crystal Reports语法,我们就有了这个,并且它有效{PO_RECEIPTS.DATE_RECEIVED} = currentdate
但是,在转换为Oracle SQL时,我该如何使用标准:TO_CHAR (SYSDATE,' MM-DD-YYYY HH24:MI:SS')成为范围,这样我们就可以在白天选择所有内容,而不仅仅是与报告运行的第二个相匹配的内容。
今天00:00:00到23:59:59之类的东西呢?
谢谢!
答案 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()
的字符串;你要么必须将所有列值转换为字符串(这是低效的并且阻止使用索引),要么让字符串(隐式)转换回日期。最好将列值与相同的数据类型进行比较,以减少或避免混淆。