TO_DATE('235959','HH24MISS')是什么意思?

时间:2018-02-05 15:04:22

标签: sql oracle

我遇到了一个带有以下条件子句

的SQL查询
To_Char(CRTE_TMS, 'YYYYmmddHH24MISS')  between To_Char (TO_DATE(:endDtTime,'YYYYmmddHH24MISS')-TO_DATE('235959', 'HH24MISS')) and  :endDtTime 

我的高层理解是创建时间戳应该在结束时间和结束时间之间的某个时间之间。 不确定TO_DATE('235959','HH24MISS')是什么意思。

如果我在2月5日运行以下查询,则返回2月1日

SELECT TO_DATE('235959', 'HH24MISS') FROM DUAl

请帮助我理解这个条件究竟是什么意思。

2 个答案:

答案 0 :(得分:1)

TO_DATE('235959', 'HH24MISS')创建DATE值。请注意,在Oracle数据类型DATE中始终包含日期和时间部分。

如果您没有提供任何日期值,那么Oracle会将其默认为当前月份的第一天,因此TO_DATE('235959', 'HH24MISS')返回“2018-02-01 23:59:59”

我认为这种情况没有意义:

To_Char(CRTE_TMS, 'YYYYmmddHH24MISS')  
    between To_Char (TO_DATE(:endDtTime,'YYYYmmddHH24MISS')-TO_DATE('235959', 'HH24MISS')) 
       and  :endDtTime 

首先,您应该比较DATE值,而不是字符串。

假设 TO_DATE(:endDtTime,'YYYYmmddHH24MISS')-TO_DATE('235959', 'HH24MISS'))错误。我想你的意思是TO_DATE(:endDtTime,'YYYYmmddHH24MISS') - 1 + (1/24/60/60)

这将减1天加1秒(1/24/60/60),即减去23:59:59。 另一种可能性是TO_DATE(:endDtTime,'YYYYmmddHH24MISS') - INTERVAL '23:59:59' HOUR TO SECOND

所以,你的情况可能是

WHERE CRTE_TMS between TO_DATE(:endDtTime,'YYYYmmddHH24MISS') - 1 + (1/24/60/60) AND :endDtTime

答案 1 :(得分:1)

这可能是评论而不是答案。抱歉没有足够的声誉。

HH24是小时的24小时格式。 235959是23小时59分59秒。

12小时格式表示晚上11:59:59。

您要做的是将日期格式转换为字符,并将其与其他日期进行比较,方法是使用To_char将它们转换为字符格式。我不建议这样做。 以下将给出本月的第一天

SELECT TO_DATE('235959', 'HH24MISS') FROM DUAl;

我无法理解你在这里想要达到的目标。 以下语法以字符格式给出,这是两个日期之间的差异。例如4天10小时。

To_Char (TO_DATE(:endDtTime,'YYYYmmddHH24MISS')-TO_DATE('235959', 'HH24MISS'))

然后你试图在(4天到10小时)和:结束时间之间进行比较。这是不正确的。

您可以使用以下内容转换为日期格式。

to_date('01012018 23:59:59','MMDDYYYY HH24:MI:SS')

select case when to_date('01012018 23:59:59','MMDDYYYY HH24:MI:SS') between :begindate and :enddate then 1
else null
from dual;