Man Down Ответов: 2

Проблема с DATEDIFF


Это мой сценарий :

CASE
WHEN Users.ResignationDate IS NOT NULL THEN
DATEDIFF(YEAR,WorkStartDate,ResignationDate)
ELSE
DATEDIFF(YEAR,WorkStartDate,GETDate())END as AncinitetViaÅr,


Это дает мне такой результат: 2

Но я хочу, чтобы мой результат выглядел так: 2 Годы

Может кто-нибудь, пожалуйста, помочь или указать мне правильное направление. Спасибо.

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

CASE
WHEN Users.ResignationDate IS NOT NULL THEN
DATEDIFF(YEAR,WorkStartDate,ResignationDate)
ELSE
DATEDIFF(YEAR,WorkStartDate,GETDate()END as AncinitetViaÅr)+ 'Years'


Но это не работает

2 Ответов

Рейтинг:
15

Bryian Tan

Я думаю, что вы на правильном пути, запрос просто нужно немного чирикнуть. Главное-это

1. Преобразовать целое число возвращения из datediff для строки
2. Строку добавить + 'лет' в конце каждого условия

CASE
 WHEN Users.ResignationDate IS NOT NULL THEN
  CONVERT(VARCHAR(3),DATEDIFF(YEAR,WorkStartDate,ResignationDate))+ ' Years'
 ELSE
    CONVERT(VARCHAR(3),DATEDIFF(YEAR,WorkStartDate,GETDate())) + ' Years'  
END as AncinitetViaÅr


Man Down

tnx за вашу помощь. у меня есть еще одна проблема с месяцем, я использую это для месяца, а затем, когда я смотрю на результат, он выглядит так: 2 года 556 месяц 22 день: CONVERT(varchar(4), DATEDIFF(YEAR, WorkStartDate, GETDATE ()) + ' years '+
Литой(функция datediff(мм, функция dateadd(ый, функция datediff(ый,getdate(),то WorkStartDate), WorkStartDate), функции getdate()) Как varchar(4)) + ' месяц '+
Литой(функция datediff(ДД, функция dateadd(мм, функция datediff(мм, функция dateadd(ый, функция datediff(ый, WorkStartDate, функции getdate()), WorkStartDate), функции getdate()), функция dateadd(ый, функция datediff(ый, WorkStartDate, функции getdate()), WorkStartDate)), функцию getdate()) Как varchar(2)) + ' day ' end) в результате
____________________________________
Когда я меняю положение WorkStartDate и GetDate (), я получаю еще один странный результат, что-то вроде этого : 2 года -2 месяца 22 дня

Bryian Tan

хммм, не уверен, я думаю, что это можно было бы упростить, вот пример

Объявить дату @WorkStartDate
SET @WorkStartDate = '9/11/2014'
ВЫБИРАТЬ
Конвертировать(тип varchar(4), функция datediff(ДД, @WorkStartDate, функции getdate())/365) + ' лет '+

Конвертировать(тип varchar(4), функция datediff(месяц, @WorkStartDate, getdate ()) для % 12) + "месяц" +

Литой(функция datediff(ДД, функция dateadd(мм, функция datediff(мм, функция dateadd(ый, функция datediff(ый, @WorkStartDate, функции getdate()), @WorkStartDate), функции getdate()),
Функция dateadd(ый, функция datediff(ый, @WorkStartDate, функции getdate()), @WorkStartDate)), функцию getdate()) Как варчар(2)) + 'день'

Вы можете сравнить результат здесь: Рассчитать Продолжительность Между Двумя Датами-Результаты[^]

Man Down

большое спасибо Брайан

Рейтинг:
1

Graeme_Grant

Попробуйте поискать в google изменения, ответ будет там.. sql формат datetime в строку[^]