在 s-s-rS 中转换儒略日期
Posted
技术标签:
【中文标题】在 s-s-rS 中转换儒略日期【英文标题】:COnverting Julian date in s-s-rS 【发布时间】:2017-06-27 00:33:16 【问题描述】:我有一个问题。我正在创建一个报告,其中查询在 iSeries DB2 for AS400 中提取 Julian Date
。
如何在s-s-rS
中将其转换为Gregorian Date
。我试图修改我的 SQL 查询但没有成功。因此决定将其转换为 s-s-rS。
假设我得到一个号码116193
。如何将其转换为July 11 2016
。
(例如:116193+1900000=2016193。2016 年第 193 天)。
我可以做很多 if 语句,但我想要一些更简单的东西。
【问题讨论】:
【参考方案1】:给定: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 日开始,所以日期算术需要比 193 少 1 天,即如果你在 1 月 1 日加上 193 天,你会得到 7 月 12 日。
【讨论】:
【参考方案2】:输入 SQL
DECLARE @JulianDate INT = 116193
SELECT DATEADD(DD, CAST(Right(@JulianDate + 1900000, 3) AS INT) - 1, CAST(LEFT(@JulianDate + 1900000, 4) AS DATE))
在 s-s-rS 中,
= DateAdd("d",CInt(Right(Fields!Julian.Value + 1900000, 3)) - 1 , CDate("1/1/"& Left(Fields!Julian.Value + 1900000, 4)))
【讨论】:
以上是关于在 s-s-rS 中转换儒略日期的主要内容,如果未能解决你的问题,请参考以下文章