在Oracle中To_Date,To_Char

时间:2016-07-08 09:34:31

标签: oracle-sqldeveloper

我在oracle DB上的查询是:

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 个答案:

答案 0 :(得分:1)

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

{% javascripts 'web/js/*' %}
     <script src="{{ asset_url }}"></script>
{% endjavascripts %}

更改过去7天的匹配条件,例如
trunc关键字从日期/时间值中删除时间戳:

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'))

更改to_date中的格式掩码以指定时间,例如
此添加将过滤开始或结束时间介于06:30:00和07:59:59之间的条目:

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))

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