我有一个包含列" create_date"的表。我想选择在前一天下午6点到当天下午6点之间插入的记录。这个数据每天都要提取,无需手动输入日期和时间。 所以任何人都可以帮我写一个查询来获取属于这个标准的记录。 列数据类型为日期。
提前致谢。
答案 0 :(得分:1)
对于前一天下午6点,您可以使用TRUNC(SYSDATE -1)
,这会将时间部分截断为00:00:00
,然后再添加18小时。同样,对于今天,做TRUNC(SYSDATE)
并增加18个小时。
SQL> SELECT to_char(trunc(SYSDATE -1) + 18/24,'mm/dd/yyyy hh24:mi:ss')
2 FROM dual;
TO_CHAR(TRUNC(SYSDA
-------------------
02/25/2015 18:00:00
SQL>
所以,截断(SYSDATE -1)+ 18/24 给你昨天的日期为下午6点。
测试案例
SQL> WITH DATA AS
2 ( SELECT 'text' col, SYSDATE create_date FROM dual
3 )
4 SELECT *
5 FROM DATA
6 WHERE create_date
7 BETWEEN (TRUNC(sysdate -1) + 18/24) AND (TRUNC(sysdate) + 18/24)
8 /
COL CREATE_DA
---- ---------
text 26-FEB-15
SQL>
答案 1 :(得分:0)
如果您想要所需的结果,那么首先您必须将列的数据类型更改为Timestamp.
然后将值随时间存储到该列中。然后
试试这个: -
SELECT *
FROM TAB_NAME
WHERE EXTRACT (HOUR FROM create_date) >= 6
AND EXTRACT (DATE FROM create_date) = SYSDATE - 1