Man Down Ответов: 1

'2 года -2 месяца 21 день' почему я получаю минус, когда возвращаю month-DATEDIFF


Когда я выполнил свой запрос, я получил минус с месяцем ! Может ли кто-нибудь указать мне правильное направление? Спасибо.

SELECT 
CAST(DATEDIFF(yy, WorkStartDate, GETDATE()) AS varchar(4)) +' year '+
CAST(DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy, WorkStartDate, GETDATE()), WorkStartDate), GETDATE()) AS varchar(2)) +' month '+
CAST(DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy, WorkStartDate, GETDATE()), WorkStartDate), GETDATE()), DATEADD(yy, DATEDIFF(yy, WorkStartDate, GETDATE()), WorkStartDate)), GETDATE()) AS varchar(2)) +' day'   as result
FROM dbo.Paychecks INNER JOIN dbo.Users ON Users.Id=Paychecks.UserId
WHERE Users.CustomerId=214 order by Users.FirstName;


Что я уже пробовал:

SELECT 
CAST(DATEDIFF(yy, WorkStartDate, GETDATE()) AS varchar(4)) +' year '+
CAST(DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy, WorkStartDate, GETDATE()), WorkStartDate), GETDATE()) AS varchar(2)) +' month '+
CAST(DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy, WorkStartDate, GETDATE()), WorkStartDate), GETDATE()), DATEADD(yy, DATEDIFF(yy, WorkStartDate, GETDATE()), WorkStartDate)), GETDATE()) AS varchar(2)) +' day'   as result
FROM dbo.Paychecks INNER JOIN dbo.Users ON Users.Id=Paychecks.UserId
WHERE Users.CustomerId=214 order by Users.FirstName;

1 Ответов

Рейтинг:
8

Graeme_Grant

Если дата слева от вычитания меньше, чем дата справа, то результат будет отрицательным. Более старые даты имеют меньшую ценность по сравнению с более новыми датами.


Man Down

tnx для вашего комментария, я узнаю, что это была проблема

Maciej Los

Коротко и по существу.
5!

Graeme_Grant

спасибо :)