我发现了一个让我感到困惑的奇怪片段,所以我想我会问专家。
假设tableA获得了以下带有数据的列:
"START_TIME":1399075198
"END_TIME":1399075200
"START_DATE":"02-MAY-14"
"END_DATE":"03-MAY-14"
现在查询1:
SELECT MIN(start_date) INTO sdate FROM tableA;
查询2:
SELECT TRUNC(sdate, 'HH24') + INTERVAL '30' MINUTE from dual;
因此,如果开始日期=' 02-MAY-14',那将如何截断到' HH24'?
答案 0 :(得分:2)
表达式:
TRUNC(sdate, 'HH24')
从小于一小时的日期(即分钟和秒)切断所有内容。具体日期:
TRUNC('02-MAY-14','HH24')
它返回日期不变。只有Oracle日期包含时间组件才有意义。
可能,您的SQL工具(SQL Developer,TOAD等)配置为不显示Oracle日期的时间部分。所以原始日期实际上可能是02-MAY-14 09:03:25
。然后它会返回:
02-MAY-14 09:00:00
您提到列 START_TIME 和 END_TIME 但未在SQL查询中使用它们。它们用于什么?
答案 1 :(得分:0)
由于start_date在您的示例中没有时间部分,因此TRUNC在这里是多余的。但是如果它有一个timepart,如果例如start_time之前已经添加到start_date,则TRUNC将删除分钟,秒和微秒,仅保留日期和小时,因为'HH24'意味着“将日期时间截断为整个小时”。
答案 2 :(得分:0)
在Oracle中,date数据类型本身也存储时间。
尝试执行以下查询。它应该清楚一点:
SELECT TO_CHAR(SYSDATE,' DD-MON-YYYY HH:MI:SS'),TO_CHAR(TRUNC(SYSDATE,' HH24'),' DD-MON -YYYY HH:MI:SS')来自DUAL;