Usecase:选择全天记录的查询,应定期运行。
这是我的问题。
Select to_char(in_date + interval '12' hour, 'DD-MON-YYYY HH24:MI:SS')
from my_table
where incoming_date > sysdate-2 and incoming_date < sysdate我只需要选择昨天的数据。由于select语句中的转换,我还获得了今天的数据。如何只选择昨天的数据?我的数据库是UTC+7.00标准的。我需要以本地标准显示它,所以我在select语句中进行了转换。我如何只显示昨天的数据呢?我被卡住了。请帮帮我
发布于 2017-11-06 07:58:10
要获取昨天的所有数据,您应该使用
SELECT TO_CHAR(IN_DATE + INTERVAL '12' HOUR, 'DD-MON-YYYY HH24:MI:SS')
FROM MY_TABLE
WHERE INCOMING_DATE BETWEEN TRUNC(SYSDATE) - INTERVAL '1' DAY
AND TRUNC(SYSDATE) - INTERVAL '1' SECOND例如,如果SYSDATE为05-NOV-2017 18:56:35,则BETWEEN比较中使用的时间间隔将是从04-NOV-2017 00:00:00到04-NOV-2017 23:59:59。两次比较包括两个端点,因此在此示例中,这将仅返回INCOMING_DATE为2017年11月4日的某个时间的数据。
祝你好运。
发布于 2017-11-06 04:46:27
只是为了让
昨天的数据
将WHERE条件设置为
incoming_date between trunc(sysdate) - interval '1' day and trunc(sysdate) - interval '1' second发布于 2017-11-06 17:55:15
My DB采用UTC+7.00标准。我需要以本地标准显示它,所以我在select语句中进行了转换。
使用魔术值(INTERVAL '12' HOUR)并不能描述它的含义或您在选择该值时所做的假设。相反,通过使用FROM_TS( timestampvalue, timezonestring )将值从TIMESTAMP转换为TIMESTAMP WITH TIME ZONE数据类型,然后使用AT LOCAL TIME将其转换为本地时间,可以更好地描述该过程。然后,如果您有夏令时或将查询转移到另一个国际位置,那么它仍将以当前本地时间显示。如下所示:
SELECT TO_CHAR(
FROM_TZ( CAST( in_date AS TIMESTAMP ), '+07:00' ) AT LOCAL TIME,
'DD-MON-YYYY HH24:MI:SS'
)
FROM my_table
WHERE incoming_date >= TRUNC( SYSDATE ) - INTERVAL '1' DAY
AND incoming_date < TRUNC( SYSDATE )以及如何只显示昨天的数据?
TRUNC( SYSDATE )会将今天的日期截断到午夜。要获取昨天的数据,您可以获取大于或等于TRUNC( SYSDATE ) - INTERVAL '1' DAY (今天午夜前一天)以及小于TRUNC( SYSDATE ) (今天午夜)的值。
https://stackoverflow.com/questions/47126143
复制相似问题