首页 文章

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

提问于
浏览
1

帮助我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 回答

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

相关问题