我有一个问题。我正在创建一个报告,其中查询在iSeries DB2 for AS400中提取Julian Date
。
如何将其转换为Gregorian Date
中的SSRS
。我试图修改我的SQL查询,但没有成功。因此决定将其转换为SSRS。
我们说我得到一个号码116193
。如何将其转换为July 11 2016
。
(例如:116193 + 1900000 = 2016193。2016年和第193天)。
我可以做很多if语句,但我想要更容易的事情。
答案 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)))