SQL日期转换错误

SQL日期转换错误,sql,sql-server-2008,Sql,Sql Server 2008,在这里使用SQLServer2008。在将可怕的日期从INT格式转换为可用格式方面,我仍然存在一些问题。当我只转换一列时,它工作得很好,但是如果我同时尝试所需的日期和发货日期,它会给我 从字符串转换日期和/或时间时转换失败 错误 这是我的密码: SELECT SPSYS07.loc_code, SPSYS07.so_no, SPSYS07.cust_no, CONVERT(DATETIME, CONVERT(CHAR(8), SPSYS07.req_d_date), 1

在这里使用SQLServer2008。在将可怕的日期从
INT
格式转换为可用格式方面,我仍然存在一些问题。当我只转换一列时,它工作得很好,但是如果我同时尝试所需的日期和发货日期,它会给我

从字符串转换日期和/或时间时转换失败

错误

这是我的密码:

SELECT 
    SPSYS07.loc_code, SPSYS07.so_no, SPSYS07.cust_no,    
    CONVERT(DATETIME, CONVERT(CHAR(8), SPSYS07.req_d_date), 101),
    CONVERT(DATETIME, CONVERT(CHAR(8), SPSYS07.ship_date), 101)
FROM 
    SCOT_IQ.dbo.SPSYS07 SPSYS07
WHERE 
    (SPSYS07.loc_code = '103') AND (SPSYS07.order_date = 20120531)
ORDER BY 
    SPSYS07.so_no
任何帮助都将不胜感激


您可以使用类似的方法来追踪罪犯,从MyTable中选择*where>ISDATE(convert(char(8),MyDateColumn))=0 yes

回答:有些值在发货日期中只有1个零

这意味着您必须从查询中排除这些行,使用大小写表达式为坏值指定任意值,或者修复数据。还有,我很肯定你会同意的,但我还是要说。。。您应该将日期值存储在日期/日期时间数据类型中。这可以防止类似的问题,并使事情变得更加容易


此外,不应在日期列中存储值0,而应存储值NULL,或具有任意默认值。

您可以在选择中测试有效日期,如果日期无效,则返回NULL。不过,最好是将表中的日期存储为DATE类型

SELECT 
    SPSYS07.loc_code, SPSYS07.so_no, SPSYS07.cust_no,    
    CASE WHEN ISDATE(CONVERT(CHAR(8), SPSYS07.req_d_date)) = 0 THEN NULL ELSE CONVERT(DATETIME, CONVERT(CHAR(8), SPSYS07.req_d_date), 101) END AS 'req_d_date',
    CASE WHEN ISDATE(CONVERT(CHAR(8), SPSYS07.ship_date)) = 0 THEN NULL ELSE CONVERT(DATETIME, CONVERT(CHAR(8), SPSYS07.ship_date), 101) END AS 'ship_date'
FROM 
    SCOT_IQ.dbo.SPSYS07 SPSYS07
WHERE 
    (SPSYS07.loc_code = '103') AND (SPSYS07.order_date = 20120531)
ORDER BY 
    SPSYS07.so_no

一些数据和预期输出会很有用。您正在将
order\u date
列与数字进行比较,那么该列实际上是数字吗?请求日期和发货日期是否也是数字,并且使用与订单日期相同的格式?听起来有些整数日期没有正确存储在表中。尝试查找无效值。您可以使用类似的方法来追踪罪犯,从MyTable中选择*,其中ISDATE(convert(char(8),MyDateColumn))=0是的,有些值在ship_date中只有1个零…这给了我一个“在选择列列表之后没有预期的ISDATE”错误在选择列表中的最后一项后面有一个额外的逗号。试着去掉那个谢谢Adam Haines我去掉了多余的逗号