2013-09-09 1 views
0

мне нужна помощь для этого запросапредстоящая дате выдачи рождаемости в запросе до 1970 с отметкой времени UNIX с MySQL

Теперь я использую метку времени Unix для сохранения даты рождения пользователя

У меня есть этот запрос для получения даты рождения для пользователей. Его работает только после 1970 д.р. как 1986-09-18 (ГМД)
но не работает, прежде чем 1970 д.р. как 1969-09-18 (ГМД)

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

Давайте посмотрим .. использовать 'DATETIME', тип, который был специально для таких целей? –

+1

Или даже лучше - используйте тип DATE (если вы не знаете фактическое время рождения). – Vatev

ответ

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 
+0

можно ли использовать запрос вместо запроса выше? Потому что он дает все записи из таблицы. –

+0

Конечно, это был только пример: SELECT u.id, u.dob FROM hrs_employee_details u WHERE DATE_FORMAT (FROM_DAYS (TO_DAYS (NOW()) - TO_DAYS (DATE_ADD (FROM_UNIXTIME (0), INTERVAL dob second))), '% Y') + 0 МЕЖДУ 20 И 30 – davey

0

MySQL не поддерживает отметки времени UNIX для дат до 1970-01-01 00:00:00 UTC (т. Е. Отрицательные временные метки). Функция UNIX_TIMESTAMP возвращает unsigned integer values only, и это unlikely to change. Функция FROM_UNIXTIME возвращает NULL за любой отрицательный аргумент.