1

我在网上看到了很多例子,在 SO 上也看到了一些例子。但是,似乎没有一个适用于我的数据。这里有一些儒略日期及其已知的转换值。

JUL | DateTime
2454522 | 2008-02-25 00:00:00.000
2454571 | 2008-04-14 00:00:00.000
2455713 | 2011-05-31 00:00:00.000

我试过这个不起作用:

DECLARE @JD int = 2454522
SELECT DATEADD(YEAR, @JD / 1000 - 1900, @JD % 1000 - 1)

它给了我这个: 2455-06-06 00:00:00.000 这显然是错误的。我在这里想念什么?提前感谢。

4

3 回答 3

3

一种适用于 SQLServer 的方法:

select @jd, dateadd(d,@jd - 2440588,'1970-01-01')

SQLFiddle在这里

于 2013-04-29T15:44:42.480 回答
1

只要您的 DBMS 支持一组标量函数,这些函数能够计算两个日期之间的天数,并且可以为给定日期添加天数,您所需要做的就是计算 Julian Dates 的某种标准化值和做一些相当简单的日期数学。

在 DB/2 环境中,相关函数是:DAYS 和 DATE。从一些你知道儒略日期的基准日期开始。例如,2000-01-01 的儒略日期是:2451545。

接下来使用 DAYS/DATE 标量函数计算同一日期的整数值。在 DB/2 中执行此操作的查询是:

select days(date('2000-01-01'))
from sysibm.sysdummy1
;

这个查询的结果是:730120

使用这两个值计算儒略日期的归一化因子:2451545 - 730120 = 1721425

现在您可以从儒略日期计算公历日期,如下所示:

select date(juliandate - 1721425)
from sysibm.sysdummy1
;

使用您问题中的示例:

select date(2454522 - 1721425),
       date(2454571 - 1721425),
       date(2455713 - 1721425)
from sysibm.sysdummy1
;

返回以下日期: 2008-02-25 2008-04-14 2011-05-31

您的 DBMS 可能不支持上面示例中使用的特定标量函数,但是,大多数将支持从公历日期添加一些天数并确定两个日期之间的天数的某种机制。您应该能够使用这些函数和儒略日期的标准化因子设计一些可行的公式,如上图所示。

于 2013-04-29T15:20:29.707 回答
0

这些是天文儒略日期值,仅限全天。SQL Server 中对日期时间的快速而肮脏的转换(当然不能低于 1753 年)将是:

DECLARE @jd as int = 2454522
SELECT CAST(@jd - 2415021 as datetime)

2008-02-25 00:00:00.000

2415021来自以下内容:

SELECT CAST(0 as datetime)

1900-01-01 00:00:00.000

根据 at Julian Date 转换器,1900-01-01 CE 是2415020.5。加上 0.5,因为天文儒略日期从中午开始,我们只处理一整天。

如果你不喜欢脏,试试这个:

DECLARE @jd as int = 2454522
SELECT DATEADD(DAY, @jd - 2415021, '1900-01-01')

2008-02-25 00:00:00.000
于 2013-10-15T20:01:36.347 回答