Преобразовать юлианскую дату CYYDDD в ДД / ММ / ГГГГ - PullRequest
2 голосов
/ 13 июня 2019

У меня есть столбец в таблице в SQL Server, который хранит дату в юлианском формате (CYYDDD).Я запускаю выбранный SQL в поле и хотел бы преобразовать формат даты в ДД / ММ / ГГГГ.

Пробовал несколько SQL для преобразования формата, но ни один из них не дал мне правильный вывод

DATEADD(dd, (@jdate - ((@jdate/1000) * 1000)) - 1, dateadd(yy, @jdate/1000, 0))

DATEADD(year, XHUPMJ / 1000, 0) + DATEADD(day, XHUPMJ % 1000, 0) - 1

Хотелось бы видеть вывод даты в формате ДД / ММ / ГГГГ без каких-либо следующих 0-х

У меня в столбце значение Юлианской даты как 115351, и я ожидаюэто преобразовать в 17/12/2015

Ответы [ 2 ]

2 голосов
/ 13 июня 2019

Я нашел пример кода с этого сайта , чтобы преобразовать юлианскую дату в формат ДД / ММ / ГГГГ

DECLARE @Sample AS VARCHAR(6) = '115351'
SELECT CONVERT(VARCHAR(10), DATEADD(DAY, CONVERT(INT, @Sample) - ((1000*(CONVERT(INT, @Sample)/1000)))-1, DATEADD(YEAR, CONVERT(INT, @Sample/1000), '1 Jan 1900')), 103) AS Result

он будет конвертировать 351-й день года 2015Таким образом, результат будет 17/12/2015

Демонстрация по дб <> fiddle


ОБНОВЛЕНИЕ:

Как и cars10m, предложенных в комментарии , с использованием оператора % Modulus, приведенный выше запрос может быть уменьшен до

DECLARE @Sample AS VARCHAR(6) = '115351'
SELECT CONVERT(VARCHAR(10), DATEADD(DAY, CONVERT(INT, @Sample) % 1000 -1, DATEADD(YEAR, CONVERT(INT, @Sample/1000), '1 Jan 1900')), 103) AS Result
0 голосов
/ 13 июня 2019

Вам нужен этот ответ?

SELECT DATEADD(day, CAST(RIGHT(Variable,3) AS int) / 1, CONVERT(datetime,LEFT(Variable,2) + '0101', 103))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...