即将出现的1970年以前的查询出生日期,带有mysql的unix时间戳

时间:2013-09-09 12:40:59

标签: mysql unix-timestamp

我需要这个查询的帮助

现在我使用unix时间戳来保存用户的出生日期

我有这个查询来获取用户的即将到来的出生日期。 它只适用于1970年以后的dob,如1986-09-18(Y-m-d)
但它在1970年之前没有工作,如1969-09-18(Y-m-d)

SELECT u.id, u.dob
FROM hrs_employee_details u 
WHERE CONCAT( IF( MONTH( FROM_UNIXTIME( u.dob ) ) =1 AND MONTH( CURRENT_DATE( ) ) = 12, YEAR( CURRENT_DATE( ) ) +1, YEAR( CURRENT_DATE( ) ) ) , DATE_FORMAT( FROM_UNIXTIME( u.dob ) , '-%m-%d' ) ) 
BETWEEN CURRENT_DATE() AND DATE_ADD( CURRENT_DATE() , INTERVAL 14 DAY ) AND u.dob <> '' ;

请尽快帮助我 提前谢谢......

2 个答案:

答案 0 :(得分:0)

MySQL不支持1970-01-01 00:00:00 UTC之前的日期的UNIX时间戳(即负时间戳)。函数UNIX_TIMESTAMP返回unsigned integer values only,它是unlikely to change。对于任何否定参数,函数FROM_UNIXTIME都会返回NULL

答案 1 :(得分:0)

如前所述,为此使用DATE(TIME)字段,使用起来要容易得多。

但要获得负时间戳的年龄:

SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(DATE_ADD(FROM_UNIXTIME(0), INTERVAL dob second))), '%Y')+0 AS age FROM hrs_employee_details