【问题标题】:SQL date conversion errorSQL日期转换错误
【发布时间】:2013-07-10 16:56:55
【问题描述】:

在此处使用 SQL Server 2008。我仍然无法将可怕的日期从格式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

任何帮助将不胜感激!

【问题讨论】:

  • 一些数据和预期输出会很有用。
  • 您正在将order_date 列与一个数字进行比较,那么该列实际上是数字吗? req_d_date` 和 ship_date 是否也是数字并使用与 order_date 相同的格式?
  • 听起来您的某些整数日期未正确存储在表中。尝试查找无效值。
  • 你可以用这样的东西来追查罪魁祸首,select * from MyTable where ISDATE(convert(char(8),MyDateColumn))=0
  • 是的,有些值在 ship_date 中只有 1 个零...

标签: sql sql-server-2008


【解决方案1】:

你可以用这样的东西来追查罪魁祸首,select * from MyTable where > ISDATE(convert(char(8),MyDateColumn))=0 yes

ans:有一些值在 ship_date 中只有 1 个零...

这意味着您必须从查询中排除这些行,使用 case 表达式为错误值指定任意值,或者修复数据。另外,我很确定您会同意,但无论如何我都会这么说……您应该将日期值存储在日期/日期时间数据类型中。这样可以防止此类问题,并使事情变得更容易。

此外,您应该存储一个 NULL 值,或者具有一些任意的默认值,而不是在日期列中存储值 0。

【讨论】:

    【解决方案2】:

    您可以在选择中测试有效日期,如果日期无效则返回 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
    

    【讨论】:

    • 这给了我一个“没想到在 SELECT 列列表之后出现 'ISDATE'”。错误
    • 您在选择列表中的最后一项之后有一个额外的逗号。尝试删除它
    • 感谢 Adam Haines,我删除了多余的逗号
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 2011-07-29
    相关资源
    最近更新 更多