【发布时间】:2019-04-25 09:25:00
【问题描述】:
我的查询:
SELECT COUNT(*)
FROM pd_heat_data
WHERE treatend_act LIKE TO_CHAR(current_date + 1,'YYYY-MM-DD%') AND (
( TO_CHAR(TO_DATE(treatend_act,'YYYY-MM-DD HH24:MI:SS'),'HH24:MI:SS')
> '00:00:00' )
AND ( TO_CHAR(TO_DATE(treatend_act,'YYYY-MM-DD HH24:MI:SS'),'HH24:MI:SS')
< '06:00:00' )
);
表结构:
HeatID TREATEND_ACT(varchar2)
0001027184 2018-11-23 02:20:25,906
0001027399 2018-11-23 04:45:02,571
系统日期和时间设置:
Short Date: yyyy-MM-dd
Long Date: dd MMMMM,yyyy
Short Time: hh:mm tt
Long Time: hh:mm:ss tt
No AM andPM
【问题讨论】:
-
虽然从您的查询中可以明显看出您正在尝试做什么,但如果您解释一下您实际想要实现的目标,这对阅读您的问题的每个人都有帮助。另外,请不要将日期/时间戳存储为
VARCHAR2,这不是一个好的设计习惯。 -
@deependra679:当您使用字符串 (varchar2) 并且您的转换(
TO_DATE和TO_CHAR)指定格式时,您的日期/时间设置不会发挥重要作用。 (否则,请记住,这更多的是关于您的会话设置,而不是您的服务器设置。)如果您打算坚持日期/时间作为文本和双重转换,您可以尝试使用TO_TIMESTAMP(treatend_act, 'YYYY-MM-DD HH24:MI:SS,FF3')。