我需要这个查询的帮助
现在我使用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 <> '' ;
请尽快帮助我 提前谢谢......
答案 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