无法将Julian INT日期转换为常规TSQL日期时间

时间:2010-06-17 03:55:22

标签: tsql julian

帮助我Stackoverflow,我已经接近在这个问题上键盘上的所有“HULK SMASH”了。我仔细研究过,但显然我没有做对。

我正在处理从专有工具(Platinum SQL?)引用的Julian日期,虽然我在SQL 2005中工作。当我运行select语句时,我可以将他们的“特殊”版本的Julian转换为datetime。不幸的是,它不会插入日期时间列,我尝试时会出现以下错误:

将char数据类型转换为datetime数据类型会导致日期时间值超出范围。

因此,我无法设置日期时间条件来运行存储过程报告。

原值:733416 等效日历值:01-09-2009

下面是我的代码......我很接近,但我看不出有什么问题,我需要我的转换语句来实际将Julian值(733416)转换为兼容的TSQL DATETIME值。

SELECT       
org_id, 
CASE WHEN date_applied = 0 THEN '00-00-00' 
ELSE convert(char(50),dateadd(day,date_applied-729960,convert(datetime, '07-25-99')),101) 
END AS date_applied,

CASE WHEN date_posted = 0 THEN '00-00-00'  
ELSE convert(char(50),dateadd(day,date_posted-729960,convert(datetime, '07-25-99')),101) 
END AS date_posted

from general_vw

1 个答案:

答案 0 :(得分:1)

SELECT       
org_id, 
CASE WHEN date_applied = 0 OR date_applied < 639906 THEN convert(datetime, '1753-01-01')
ELSE dateadd(day,date_applied-729960,convert(datetime, '07-25-99'))
END AS date_applied,

CASE WHEN date_posted = 0 OR date_applied < 639906 THEN convert(datetime, '1753-01-01')
ELSE dateadd(day,date_posted-729960,convert(datetime, '07-25-99'))
END AS date_posted

from general_vw

你正在转向char但想要一个日期时间,这是一个简单的解决方法。

您还使用'00 -00-00'作为最短日期,但最小TSQL日期为'1753-01-01'。或者你可以使用类似('1900-01-01')的东西但是需要更改“小于”date_applied比较器。

我也添加了一个“小于”date_applied比较器。我把它计算为“SELECT 729960 + datediff(day,convert(datetime,'07 -25-99'),convert(datetime,'1753-01-01'))”。任何小于此值的数字都会导致日期下溢。