日期:2014-05-16  浏览次数:21082 次

oracle如何查询某个时间段的语句
大家好我是oracle初学者,有一个会员信息表, 我想查询当月或者两个月内过生日的会员,这条语句该如何写,表名:huiyuan_xinxi
会员生日字段是birday_sr。谢谢。
------解决方案--------------------
本月内的:
SELECT * FROM huiyuan_xinxi WHERE  to_char(birday_sr,'yyyy-mm')=to_char(SYSDATE,'yyyy-mm')

两个月内的:不知道前两个月算不算,先说不算的:
SELECT *
  FROM HUIYUAN_XINXI
 WHERE TO_CHAR(BIRDAY_SR, 'yyyy-mm-dd') <=
       TO_CHAR(ADD_MONTHS(SYSDATE, 2), 'yyyy-mm-dd')
   AND TO_CHAR(BIRDAY_SR, 'yyyy-mm-dd')>=to_char(SYSDATE,'yyyy-mm-dd')

如果两个月以前也算的话:
SELECT *
  FROM HUIYUAN_XINXI
 WHERE TO_CHAR(BIRDAY_SR, 'yyyy-mm-dd') <=
       TO_CHAR(ADD_MONTHS(SYSDATE, 2), 'yyyy-mm-dd')
   AND TO_CHAR(BIRDAY_SR, 'yyyy-mm-dd')>=to_char(add_months(SYSDATE,-2),'yyyy-mm-dd')

主要使用的函数就是add_months函数
------解决方案--------------------
根据楼主的意思,我感觉应该这么写:

SELECT *
  FROM HUIYUAN_XINXI
 WHERE  TO_CHAR(BIRDAY_SR, 'yyyy-mm-dd')>=to_char(SYSDATE,'yyyy-mm-dd')
          OR  TO_CHAR(BIRDAY_SR, 'yyyy-mm-dd') =
                  TO_CHAR(ADD_MONTHS(SYSDATE, 1), 'yyyy-mm-dd');

感觉一楼误解楼主的意思了,实际上我们只会关心还没过生日的会员,应该查当月及下月的会员生日情况。