Преобразование юлианской даты в SSRS

У меня есть вопрос. Я создаю отчет, в котором запрос извлекает Julian Date в iSeries DB2 для AS400.

Как я могу преобразовать его в Gregorian Date в SSRS. Я попытался изменить свой SQL-запрос, но безуспешно. Поэтому решил преобразовать его в SSRS.

Допустим, я получаю число 116193. Как мне преобразовать его в July 11 2016. (Например: 116193+1900000=2016193. 2016 год и 193-й день).

Я могу сделать много операторов if, но мне нужно что-то попроще.


person Roostam    schedule 27.06.2017    source источник


Ответы (2)


Дано: 116193 = 11 июля 2016 г.

with YourTable as (
    select 116193 as juldate
    )

select
   juldate, adjdate, thedate
from YourTable t
cross apply (select t.Juldate+1899999 adjdate) a1
cross apply (
      select dateadd(day,adjdate % 1000,dateadd(year,(adjdate/1000)-1900,0)) thedate
    ) a2

+---------+---------+---------------------+
| juldate | adjdate |       thedate       |
+---------+---------+---------------------+
|  116193 | 2016192 | 11.07.2016 00:00:00 |
+---------+---------+---------------------+

Первое перекрестное применение просто предоставляет псевдоним, который можно использовать во втором приложении. это можно сделать без любого из них, если это предпочтительнее.

select 
dateadd(day,(t.Juldate+1899999) % 1000,dateadd(year,((t.Juldate+1899999)/1000)-1900,0)) thedate
from YourTable t

Кстати: поскольку год начинается с 1 января, арифметика дат требует на 1 день меньше 193, т.е. если вы добавите 193 дня к 1 января, вы получите 12 июля.

person Paul Maxwell    schedule 27.06.2017

В SQL

DECLARE @JulianDate INT = 116193

SELECT DATEADD(DD, CAST(Right(@JulianDate + 1900000, 3) AS INT) - 1, CAST(LEFT(@JulianDate + 1900000, 4) AS DATE))

В СССР,

= DateAdd("d",CInt(Right(Fields!Julian.Value + 1900000, 3)) - 1 , CDate("1/1/"& Left(Fields!Julian.Value + 1900000, 4)))
person CuriousKid    schedule 01.07.2017