Как преобразовать день в формат год-месяц-день с помощью T-SQL в SQL Server 2008? - PullRequest
1 голос
/ 28 декабря 2010

У меня есть поле int (Дни) в myTable. Как я могу отформатировать его в строку год-месяц-день?

Я хочу сделать это с T-SQL SQL Server 2008.

Например:

65 дней = 0 год 2 месяца 5 дней

Ответы [ 3 ]

3 голосов
/ 28 декабря 2010

Здесь "ноль" - 01 января 1900 года. Это дает дату, связанную с этим

SELECT
   dateadd(day, myColumn, 0)
FROM
   myTable

Если вы хотите отдельно выделить значения компонентовтакже есть проблемы високосного года.После 28 февраля 1904 года у вас есть 29 февраля 1904 года. Не существует 100% гарантированного способа выразить «дни» как годы + месяцы + дни, потому что продолжительность месяца очень каждые 4 года.мы неправильно поняли, чтобы перевести его в год «ноль»

SELECT
   DATEADD(day, DATEDIFF(day, '0001-01-01', 0), CAST(DATEADD(day, myColumn, 1) as date))
FROM
   myTable
0 голосов
/ 09 декабря 2014

Я получил этот код ...

select
cast((DATEDIFF(year, StartDate, getdate()))as CHAR(3)) +'years '+
case when (datediff(DAY,DATEADD(month,DATEDIFF(month,DATEADD(year,(DATEDIFF(year, StartDate, getdate())),StartDAte), getdate()),
DATEADD(year,(DATEDIFF(year, StartDate, getdate())),StartDAte)),GETDATE()))<0 
then
cast(DATEDIFF(month,DATEADD(year,(DATEDIFF(year, StartDate, getdate())),StartDAte), getdate()) -1 AS CHAR(2))
else 
cast (DATEDIFF(month,DATEADD(year,(DATEDIFF(year, StartDate, getdate())),StartDAte), getdate())AS CHAR(2))
end +'months '+
-------------------------------------------
case when (datediff(DAY,DATEADD(month,DATEDIFF(month,DATEADD(year,(DATEDIFF(year, StartDate, getdate())),StartDAte), getdate()),
DATEADD(year,(DATEDIFF(year, StartDate, getdate())),StartDAte)),GETDATE()))<0
then
cast(datediff(DAY,DATEADD(month,DATEDIFF(month,DATEADD(year,(DATEDIFF(year, StartDate, getdate())),StartDAte), getdate())-1,
DATEADD(year,(DATEDIFF(year, StartDate, getdate())),StartDAte)),GETDATE()) as CHar(2))
else
cast(datediff(DAY,DATEADD(month,DATEDIFF(month,DATEADD(year,(DATEDIFF(year, StartDate, getdate())),StartDAte), getdate()),
DATEADD(year,(DATEDIFF(year, StartDate, getdate())),StartDAte)),GETDATE())as Char(2))
end+'days' as
Lenghtofservice
--DATEADD(year,(DATEDIFF(year, StartDate, getdate())),StartDAte)) 
 from dbo.Employee
0 голосов
/ 28 декабря 2010
declare @days int
set @days = 65
select 
cast(year(dateadd(day,@days,0))-1900 as varchar) + ' Year '
+ cast(month(dateadd(day,@days,0)) as varchar) + ' Month '
+ cast(day(dateadd(day,@days,0)) as varchar) + ' Day'

Имейте в виду, что это измеряется от 1-го числа Junuari и других проблем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...