在 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 中转换儒略日期的主要内容,如果未能解决你的问题,请参考以下文章

PHP juliantojd() 函数 - Break易站

在 s-s-rS 中转换儒略日期

CSP2020 儒略日 题解

在 impala 中将儒略日期转换为公历日期

PHP 5 Calendar 函数

将 Netezza 时间戳转换为儒略日数