Рассчитать возраст с начала текущего месяца

У меня есть следующий код для расчета даты рождения человека с сегодняшней даты, которая хорошо работает

    SELECT application.applicationLastName, application.applicationFirstName, application.applicationDoB, 
ROUND(DATEDIFF(NOW(), applicationDoB) / 365.2425,1) AS age, application.applicationID, application.applicationAcknowledged, application.applicationContacted, application.applicationDate
FROM application
ORDER BY application.applicationDate ASC 

Однако меня попросили рассчитать их возраст с 1 числа текущего месяца, и я попытался

SELECT application.applicationLastName, application.applicationFirstName, application.applicationDoB, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) AS CURMONTH, 
ROUND(DATEDIFF(CURMONTH(), applicationDoB) / 365.2425,1) AS age, application.applicationID, application.applicationAcknowledged, application.applicationContacted, application.applicationDate
FROM application
ORDER BY application.applicationDate ASC

Однако я получаю следующую ошибку: Неверный счетчик параметров при вызове собственной функции «DATEDIFF»


person Daryl T    schedule 11.12.2015    source источник


Ответы (2)


Вы не должны использовать CURMONTH(). Вместо этого отформатируйте сегодняшнюю дату как 1-е число этого месяца.

Используйте следующий запрос:

SELECT application.applicationLastName, application.applicationFirstName, application.applicationDoB, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) AS CURMONTH, 
ROUND(DATEDIFF(DATE_FORMAT(NOW() ,'%Y-%m-01'), applicationDoB) / 365.2425,1) AS age, application.applicationID, application.applicationAcknowledged, application.applicationContacted, application.applicationDate
FROM application
ORDER BY application.applicationDate ASC
person Somnath Muluk    schedule 11.12.2015
comment
Я получаю следующую ошибку: Неверный счетчик параметров в вызове собственной функции "DATEDIFF" - person Daryl T; 12.12.2015
comment
Я использовал ваше решение, но удалил лишнее (DATEDIFF, которое не требовалось - person Daryl T; 13.12.2015
comment
Окончательный используемый код: SELECT application.applicationLastName, application.applicationFirstName, application.applicationDoB, ROUND(DATEDIFF(DATE_FORMAT(NOW() ,'%Y-%m-01'), applicationDoB) / 365.2425,1) AS age, application .applicationID, application.applicationDate ОТ приложения ORDER BY application.applicationDate ASC - person Daryl T; 13.12.2015

Вы используете: DATEDIFF(CURMONTH(), applicationDoB)

в вашем коде. Но CURMONTH() дает вам только месяц текущей даты, а applicationDoB дает вам полную дату. Вам нужно заменить CURMONTH() выражением, которое также соответствует полной дате (первое число текущего месяца).

person Bruno Barral    schedule 11.12.2015