0

我需要此查询的帮助

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

我有这个查询来获取用户即将到来的出生日期。它仅适用于 1970 年出生日期之后,如 1986-09-18 (Ymd)
,但它不适用于 1970 年出生日期之前,如 1969-09-18 (Ymd)

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 <> '' ;

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

4

2 回答 2

0

MySQL 不支持 1970-01-01 00:00:00 UTC 之前的日期的 UNIX 时间戳(即负时间戳)。函数只UNIX_TIMESTAMP返回无符号整数值,并且不太可能改变。函数FROM_UNIXTIME返回NULL任何负参数。

于 2013-09-09T12:56:01.737 回答
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
于 2013-09-09T13:01:23.330 回答