我在网上看过很多例子,有些例子在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这显然是错误的。我在这里错过了什么?谢谢你提前。
答案 0 :(得分:3)
答案 1 :(得分:1)
只要您的DBMS支持一组能够计算其间天数的标量函数 两个日期并且可以在给定日期添加若干天,您需要做的就是计算某种规范化 Julian Dates的值和做一些相当简单的日期数学。
在DB / 2环境中,相关功能是:DAYS和DATE。从一些基准日期开始,你知道朱利安的日期。 例如,2000-01-01的Julian日期是:2451545。
接下来使用DAYS / DATE标量函数计算同一日期的整数值。在DB / 2中执行此操作的查询是:
select days(date('2000-01-01'))
from sysibm.sysdummy1
;
此查询的结果是:730120
使用这两个值计算Julian日期的标准化因子:2451545 - 730120 = 1721425
现在您可以从Julian日期计算格里高利日期,如下所示:
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可能不支持上述示例中使用的特定标量函数,但大多数人都会支持 从格里高利日添加一些天数并确定之间的天数的一些机制 两个约会。您应该能够使用这些函数和Julian日期的归一化因子来设计一些可行的公式 如上图所示。
答案 2 :(得分:0)
这些是天文朱利安日期值,仅限整天。 SQL Server中的 datetime 的快速和脏转换(当然不能低于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 converter,1900-01-01 CE是 2415020.5 。添加0.5,因为astronomical Julian Date从中午开始,我们只处理整天。
如果您不喜欢脏,请试试这个:
DECLARE @jd as int = 2454522
SELECT DATEADD(DAY, @jd - 2415021, '1900-01-01')
2008-02-25 00:00:00.000