Oracle SQL WHERE MONTH = N.

时间:2016-04-22 10:16:20

标签: sql oracle date

在我的选择中我正在使用此

(TRUNC(TO_DATE(TIMESTAMP, 'dd.mm.yyyyHH24:mi'))) TIMESTAMP,

以日期格式获取以下输出:例如22/04/2016

现在我想在我的WHERE子句中添加一个语句,只显示特殊月份的日期,例如只有MARCH和APRIL的日期

我试过用这个:

WHERE (TRUNC(TO_DATE(TIMESTAMP, 'mm'))) in (3,4) 

这给了我一个错误。

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

只需在时间戳上使用WHERE EXTRACT(MONTH FROM timestamp) IN (3, 4)

  line1
  line2
  line3

这将匹配3月和4月的记录。

答案 1 :(得分:2)

  

在我的选择中我正在使用此

(TRUNC(TO_DATE(TIMESTAMP, 'dd.mm.yyyyHH24:mi'))) TIMESTAMP,
     

以日期格式获取以下输出:例如22/04/2016

TO_DATE接受一个字符串值,这样您的"TIMESTAMP"列将被隐式转换为字符串,然后返回日期......这是不必要的(并且依赖于{{1}的值session参数用于格式化隐式转换 - 如果更改,将破坏查询);你可以这样做:

NLS_TIMESTAMP_FORMAT

如果你想在不同月份过滤,那么你可以做(​​按照Tim Biegeleisen的建议):

TRUNC( "TIMESTAMP" ) AS "TIMESTAMP"

或者如果你想要特定年份那么

WHERE EXTRACT( MONTH FROM "TIMESTAMP" ) IN ( 3, 4 )

或者,您可以在列上使用索引:

WHERE TRUNC( "TIMESTAMP", 'MM' ) IN ( DATE '2016-03-01', DATE '2016-04-01' )