代码之家  ›  专栏  ›  技术社区  ›  Willy

从日期字段更新日期时间字段将在SQL Server中引发错误

  •  0
  • Willy  · 技术社区  · 5 年前

    我正在尝试从另一个表(MyTable2)上的日期字段更新表(MyTable1)上的日期时间字段。

    • MyTable1中DateTime字段中的DateTime值存储如下
    • MyTable2中日期字段中的日期值按以下格式存储

    所以考虑到这一点,我执行以下两次尝试都没有成功。 我做错什么了?

    :

    UPDATE tblToUpdate
       SET tblToUpdate.DateTimeField = fromTbl.DateField
      FROM MyTable1 tblToUpdate INNER JOIN MyTable2 fromTbl on tblToUpdate.Id = fromTbl.Id
    

    这会产生以下错误:

    超出范围的值

    尝试#2 :

    UPDATE tblToUpdate
       SET tblToUpdate.DateTimeField = (case when fromTbl.DateField is NULL 
                                               then NULL 
                                               else format(fromTbl.DateField, 'yyyy-mm-dd HH:mm:ss.fff') end)
      FROM MyTable1 tblToUpdate INNER JOIN MyTable2 fromTbl on tblToUpdate.Id = fromTbl.Id
    

    这会产生以下错误:

    在超出范围的值中

    2 回复  |  直到 5 年前
        1
  •  0
  •   Thom A    5 年前

    yyyy-mm-dd HH:mm:ss.nnn datetime 数据类型。只有两个是 yyyyMMdd yyyy-MM-ddThh:mm:ss.nnn . 我也建议反对 FORMAT varchar CONVERT 和一个 style code :

    CONVERT(varchar(23),fromTbl.DateField,126)
    

    这将提供一个 瓦尔查尔 年-月-直径:mm:不锈钢nnn . 例如,使用 GETDATE() 我得到了价值 '2019-11-27T12:32:27.763' 马上。

        2
  •  0
  •   Atmira    5 年前

    必须将这些值转换为相同的值,因为如果它们是相同的时间格式,则只能用旧日期替换新日期。试试这样的。

    UPDATE tblToUpdate
       SET tblToUpdate.DateTimeField = CONVERT(datetime,fromTbl.DateField)
      FROM MyTable1 tblToUpdate INNER JOIN MyTable2 fromTbl on tblToUpdate.Id = fromTbl.Id