2016-07-08 78 views
0

我的查询对Oracle数据库是:TO_DATE,TO_CHAR在Oracle

SELECT NBR, START_TIME,END_TIME, BYTES_DATA 
FROM TABLE_NAME Partition (P201607) 
WHERE BYTES_DATA <> 0 AND NBR LIKE '%29320319%' 

和结果:

NBR   START_TIME   END_TIME   BYTES_DATA 
1029320319 2016-07-01 00:15:51 2016-07-01 00:22:44 158014048 
1029320319 2016-07-01 00:22:51 2016-07-01 01:22:51 616324863 
1029320319 2016-07-01 01:22:51 2016-07-01 01:55:15 431354240 
1029320319 2016-07-01 01:55:22 2016-07-01 02:53:45 1040869155 
1029320319 2016-07-01 02:53:52 2016-07-01 03:53:52 40615861  
1029320319 2016-07-04 07:22:05 2016-07-04 07:22:05 4911 
1029320319 2016-07-05 06:42:56 2016-07-05 07:42:56 58271774 
1029320319 2016-07-05 07:42:56 2016-07-05 07:42:56 173 
1029320319 2016-07-08 07:47:01 2016-07-08 07:47:01 105995 

不过,我想筛选基于这些时间输出。如何在本月(07)或最近7天内获取所有记录,其中start_time和end_time介于06:30:00和07:59:59之间?

回答

1

使用to_date或to_char,您可以重新格式化日期/时间字段以符合所需的条件,例如,
这个例子将显示所有的条目,其中在开始或结束时间的月份是一样的当前月份:

SELECT NBR, START_TIME,END_TIME, BYTES_DATA 
FROM TABLE_NAME Partition (P201607) 
WHERE BYTES_DATA <> 0 AND NBR LIKE '%29320319%' 
AND ((TO_DATE(START_TIME, 'mm') = TO_DATE(SYSDATE, 'mm') OR 
     (TO_DATE(END_TIME, 'mm') = TO_DATE(SYSDATE, 'mm')) 

变更为过去7天,例如匹配标准
将trunc关键字从日期/时间值删除时间戳:

AND ((TO_DATE(START_TIME, 'yyyy/mm/dd') >= (TRUNC(SYSDATE) - INTERVAL '7' days) OR 
     (TO_DATE(END_TIME, 'yyyy/mm/dd') >= (TRUNC(SYSDATE) - INTERVAL '7' days)) 

更改TO_DATE内的格式掩码来指定时间,例如
这种加入会过滤条目哪里开始或结束时间是6时三十分00秒和7点59分59秒之间:

AND ((TO_DATE(START_TIME,'hh24:mi:ss') BETWEEN 
     TO_DATE('06:30:00','hh24:mi:ss') AND 
     TO_DATE('07:59:59','hh24:mi:ss')) OR 
     (TO_DATE(END_TIME,'hh24:mi:ss') BETWEEN 
     TO_DATE('06:30:00','hh24:mi:ss') AND 
     TO_DATE('07:59:59','hh24:mi:ss')) 

我喜欢TechOnTheNet对本描述/语法和其他Oracle功能。有关可用格式参数的完整列表,请参阅链接。