首页 > 解决方案 > 日期格式图片在 Oracle 中转换整个输入字符串之前结束

问题描述

我有一个带有 HEATID 和 HEATDEPARTURE_ACT 列的 PD_HEAT_DATA 表。HEATDEPARTURE 列的数据类型是 VARCHAR2,它保存格式为 2019-07-28 23:11:11,359 的时间戳。

我的要求是在今天早上 6 点和第二天早上 6 点之间从 PD_HEAT_DATA 表中检索记录。

样本数据:

HeatID              HEATDEPARTURE_ACT    
0001024002          2019-07-29 00:46:42,115

0001024003          2019-07-29 06:46:42,115
0001024004          2019-07-29 23:46:42,115

0001024003          2019-07-30 00:06:42,115

0001024004          2019-07-30 04:46:42,115

我尝试了以下代码,但没有给出预期的结果:

select heatid, HEATDEPARTURE_ACT  from hd_heat_data  where to_date(HEATDEPARTURE_ACT, 'YYYY-MM-DD HH24:MI:SS') >= trunc(sysdate
-1) + 6/24 and
      to_date(HEATDEPARTURE_ACT, 'YYYY-MM-DD HH24:MI:SS') < trunc(sysdate) + 6/24

我尝试了以下代码,但没有给出预期的结果:

select heatid, HEATDEPARTURE_ACT  from hd_heat_data  where to_date(HEATDEPARTURE_ACT, 'YYYY-MM-DD HH24:MI:SS') >= trunc(sysdate
-1) + 6/24 and
      to_date(HEATDEPARTURE_ACT, 'YYYY-MM-DD HH24:MI:SS') < trunc(sysdate) + 6/24

标签: oracle

解决方案


您需要更改提供的格式TO_TIMESTAMPTO_TIMESTAMP(HEATDEPARTURE_ACT, 'YYYY-MM-DD HH24:MI:SS,FF')

SELECT
    HEATID,
    HEATDEPARTURE_ACT
FROM
    HD_HEAT_DATA
WHERE
    TO_TIMESTAMP(HEATDEPARTURE_ACT, 'YYYY-MM-DD HH24:MI:SS,FF') 
    BETWEEN TRUNC(SYSDATE - 1) + INTERVAL '6' HOUR AND TRUNC(SYSDATE) +
    INTERVAL '6' HOUR - INTERVAL '1' SECOND

请参阅此处的问题和解决方案再现演示

干杯!!


推荐阅读