如何检查客户的生日是否已经过去的一年?

时间:2015-05-28 08:38:09

标签: oracle

我有一个存储客户信息的表格,其中包括一个列" dateofbirth"。我需要获取那些过去一年(2015年)过生日的客户。如何提取日期和月份并将其与系统日期和月份进行比较?

3 个答案:

答案 0 :(得分:0)

select to_char(to_date('27-01-1966','DD-MM-YYYY'),'MMDD'),to_char(sysdate,'MMDD'),
CASE WHEN to_char(to_date('27-01-1966','DD-MM-YYYY'),'MMDD') > to_char(sysdate,'MMDD')
     THEN 'No'
     ELSE 'Yes'
END
from dual;

所以

WHERE to_char(dateofbirth,'MMDD') < to_char(sysdate,'MMDD')

答案 1 :(得分:0)

您可以使用EXTRACT

SELECT *
FROM   CUSTOMERS
WHERE  EXTRACT( MONTH FROM dateofbirth ) < EXTRACT( MONTH FROM SYSDATE )
OR     (   EXTRACT( MONTH FROM dateofbirth ) = EXTRACT( MONTH FROM SYSDATE )
       AND EXTRACT( DAY FROM dateofbirth )   <= EXTRACT( DAY FROM SYSDATE ) )

或者您可以将TO_CHARMMDD年份日期格式

一起使用
SELECT *
FROM   CUSTOMERS
WHERE  TO_CHAR( dateofbirth, 'MMDD' ) <= TO_CHAR( SYSDATE, 'MMDD' )

答案 2 :(得分:0)

我建议了以下解决方案

SELECT
  name,
  TO_CHAR(dob,'mm') MONTH,
  TO_CHAR(dob,'dd') DAY
FROM
  target_table
WHERE
  TO_CHAR(sysdate,'yyyy') =2015
AND
  (
    to_number(TO_CHAR(dob,'mm'))<to_number(TO_CHAR(sysdate,'mm'))
  OR
    (
      TO_CHAR(dob,'mm')   =TO_CHAR(sysdate,'mm')
    AND TO_CHAR(dob,'dd')<=TO_CHAR(sysdate,'dd')
    )
  );

我根据我的表数据编写了代码...... dob =出生日期

tartget_table =必填表