我有一个 sql 查询,如果今天的时间超过下午 3:00 ,我需要从时间在昨天下午 3:00 到今天下午 3:00 之间的表中选择记录。
如果今天的时间小于那个时间,例如今天的时间是下午 1:00。那么我的查询应该将今天的时间作为下午 1:00(这应该返回我的记录)。
我需要获取昨天下午 3:00 到今天下午 3:00 之间的时间如果今天的时间超过下午 3:00 如果今天的时间小于下午 3:00 然后获取昨天下午 3:00 到今天的当前时间
我有一个 sql 查询,如果今天的时间超过下午 3:00 ,我需要从时间在昨天下午 3:00 到今天下午 3:00 之间的表中选择记录。
如果今天的时间小于那个时间,例如今天的时间是下午 1:00。那么我的查询应该将今天的时间作为下午 1:00(这应该返回我的记录)。
我需要获取昨天下午 3:00 到今天下午 3:00 之间的时间如果今天的时间超过下午 3:00 如果今天的时间小于下午 3:00 然后获取昨天下午 3:00 到今天的当前时间
处理此问题的最佳方法是使用IF 语句:
IF TO_CHAR(SYSDATE, 'HH24') >= 15 THEN
SELECT x.*
FROM YOUR_TABLE x
WHERE x.date_column BETWEEN TO_DATE(TO_CHAR(SYSDATE -1, 'YYYY-MM-DD')|| ' 15:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND TO_DATE(TO_CHAR(SYSDATE, 'YYYY-MM-DD')|| ' 15:00:00', 'YYYY-MM-DD HH24:MI:SS')
ELSE
SELECT x.*
FROM YOUR_TABLE x
WHERE x.date_column BETWEEN TO_DATE(TO_CHAR(SYSDATE -1, 'YYYY-MM-DD')|| ' 15:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND SYSDATE
END IF;
条件 WHERE 子句是不可分割的。
如果我理解正确,您希望在最后一天内获得记录。如果当前时间是下午 3 点或更晚,则应将时间设置为下午 3 点。如果早于下午 3 点,请取当前时间...
SELECT x.*
FROM YOUR_TABLE x
JOIN (SELECT CASE
WHEN TO_CHAR(SYSDATE, 'HH24') >= 15 THEN
TO_DATE(TO_CHAR(SYSDATE, 'YYYY-MM-DD')|| ' 15:00:00', 'YYYY-MM-DD HH24:MI:SS')
ELSE SYSDATE
END AS dt
FROM DUAL) y ON x.date_column BETWEEN dt - 1 AND dt
dt - 1
表示将从 Oracle DATE 中减去 24 小时。
不需要 IF 语句。这可以通过简单的 SQL 轻松解决。
我的表 T23 有一些带有日期的记录;这是下午 3 点的示例:
SQL> select id, some_date from t23
2 where to_char(some_date,'HH24') = '15'
3 /
ID SOME_DATE
---------- ---------
14 16-MAY-11
38 17-MAY-11
62 18-MAY-11
81 19-MAY-11
SQL>
由于当前时间在下午 3 点之前,我的查询将返回 17-MAY 和 18-MAY 的记录,但不返回 ID=62 的记录...
SQL> select to_char(sysdate, 'DD-MON-YYYY HH24:MI') as time_now
2 from dual
3 /
TIME_NOW
-----------------
18-MAY-2011 10:45
SQL> select id, to_char(some_date, 'DD-MON-YYYY HH24:MI') as dt
2 from t23
3 where some_date between trunc(sysdate-1)+(15/24)
4 and least( trunc(sysdate)+(15/24), sysdate)
5 /
ID DT
---------- -----------------
38 17-MAY-2011 15:00
39 17-MAY-2011 16:00
40 17-MAY-2011 17:00
41 17-MAY-2011 18:00
42 17-MAY-2011 19:00
43 17-MAY-2011 20:00
44 17-MAY-2011 21:00
45 17-MAY-2011 22:00
46 17-MAY-2011 23:00
47 18-MAY-2011 00:00
48 18-MAY-2011 01:00
49 18-MAY-2011 02:00
50 18-MAY-2011 03:00
51 18-MAY-2011 04:00
52 18-MAY-2011 05:00
53 18-MAY-2011 06:00
54 18-MAY-2011 07:00
55 18-MAY-2011 08:00
56 18-MAY-2011 09:00
57 18-MAY-2011 10:00
20 rows selected.
SQL>