【问题标题】:Updating DateTime columns failed when converting date转换日期时更新 DateTime 列失败
【发布时间】:2015-09-12 14:02:22
【问题描述】:

帮助。我有一些记录以不同的方式插入到 DATETIME 列中。当我的 sproc 执行时,我收到此错误:“从字符串转换日期和/或时间时转换失败。”。有什么方法可以将错误的日期时间转换为正常的默认 DATETIME 格式?

好: 不好:

;with t1 as
    (
        select
            s1.SheetID as SheetID,
            s1.RowNUmber as RowNumber, 
            (select max(RowNumber) from PRP_SmartSheetA where SheetID=s1.SheetID and RowNumber<s1.RowNumber) as LastRowNumber
        from
            PRP_SmartSheetA s1
    )
    update
        s1
    set
        s1.PRP_PreviousRowFinishDate= s2.Finish
    from
        t1
            inner join PRP_SmartSheetA s1
                on t1.SheetID=s1.SheetID
                and t1.RowNUmber=s1.RowNumber
            inner join PRP_SmartSheetA s2
                on t1.SheetID=s2.SheetID
                and t1.LastRowNumber=s2.RowNumber

【问题讨论】:

  • 数据时间列没有格式。日期时间数据以二进制结构存储。用于显示目的的值的格式化由表示层完成。也许PRP_PreviousRowFinishDateFinish 是varchar 而不是datetime。
  • 您好,如果我的回答对您有帮助,请点赞和/或标记为已接受,谢谢!

标签: sql sql-server datetime sql-update


【解决方案1】:

您的“坏”日期似乎是对您的系统文化无效的字符串格式。

你可以像这样转换它们:

DECLARE @DateAsVarchar VARCHAR(20)='2015-09-16';
DECLARE @ConvertedDate AS DATETIME=CONVERT(DATETIME,REPLACE(@DateAsVarchar,'-',''),112);
SELECT @ConvertedDate;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多