1

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

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

将 char 数据类型转换为 datetime 数据类型会导致 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
4

1 回答 1

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'))”。任何小于此的数字都会导致日期下溢。

于 2010-06-17T03:58:50.793 回答