在SSRS中转换朱利安日期

时间:2017-06-27 00:33:16

标签: sql reporting-services db2 gregorian-calendar julian-date

我有一个问题。我正在创建一个报告,其中查询在iSeries DB2 for AS400中提取Julian Date

如何将其转换为Gregorian Date中的SSRS。我试图修改我的SQL查询,但没有成功。因此决定将其转换为SSRS。

我们说我得到一个号码116193。如何将其转换为July 11 2016。 (例如:116193 + 1900000 = 2016193。2016年和第193天)。

我可以做很多if语句,但我想要更容易的事情。

2 个答案:

答案 0 :(得分:0)

鉴于:116193 = 2016年7月11日

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日开始,日期算术需要1天少于193天,即如果你在1月1日增加193天,那么你将在7月12日到期。

答案 1 :(得分:0)

IN SQL

DECLARE @JulianDate INT = 116193

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

在SSRS,

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