帮助我Stackoverflow,我接近在这个问题上我的键盘上所有“HULK SMASH” . 我仔细研究过,但显然我没有做对 .
我正在处理从专有工具(Platinum SQL?)引用的Julian日期,虽然我在SQL 2005中工作 . 当我运行select语句时,我可以将他们的“特殊”版本的Julian转换为datetime . 不幸的是它不会插入到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 回答
你正在转向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'))” . 任何小于此值的数字都会导致日期下溢 .