【问题标题】:How do you update a DateTime field in T-SQL?如何更新 T-SQL 中的 DateTime 字段?
【发布时间】:2011-03-09 19:33:05
【问题描述】:

以下查询不会更新日期时间字段:

update table
SET EndDate = '2009-05-25'
WHERE Id = 1

我也试过不带破折号,但这也不起作用。

【问题讨论】:

  • 日期是实际的列名吗?
  • 其实不是,它是 EndDate,但我只是将它缩短为 Date。
  • 您收到错误还是没有结果?
  • EndDate 列的数据类型是什么?
  • 它说有 1 行受影响,但是当我检查时,日期没有改变。

标签: sql sql-server tsql types


【解决方案1】:

如有疑问,be explicit about the data type conversion using CAST/CONVERT:

UPDATE TABLE
   SET EndDate = CAST('2009-05-25' AS DATETIME)
 WHERE Id = 1

【讨论】:

  • 非常感谢在 SQL Server 2016 中运行良好。我只使用变量和所有设置。
  • 我使用了它并在日期之后添加了时间并且它有效
【解决方案2】:

通常,它应该可以工作。

但是你可以试试这个吗?我的家用电脑上没有 SQL,我自己无法尝试

UPDATE table
SET EndDate = '2009-05-25 00:00:00.000'
WHERE Id = 1

【讨论】:

  • 这行得通,但我之前尝试过没有全零,但它没有用。为什么?
  • 我用 '2009-05-25 00:02:01.000' 试过了,但是没有用。
  • 很好,真的不知道。因为你写的时候没有时间信息,而且 SQL 必须自动附加默认的 00:00:00.000。所以它必须工作。
【解决方案3】:

字符串文字根据当前的日期格式设置进行传递,请参阅SET DATEFORMAT。一种始终有效的格式是“20090525”。

现在,当然,您需要定义“不起作用”。没有记录更新?也许Id=1 不匹配任何记录...

如果显示“一条记录已更改”,那么您可能需要向我们展示您如何验证...

【讨论】:

  • 日期格式是我认为明确转换是个好主意的原因...
  • 好东西 Remus,SET DATEFORMAT 在为具有不同本地化环境的环境编写 SQL 时非常有效
  • 太棒了!这对我有用并为我节省了几个步骤,因为我正在转换的字段已经使用这种格式,即无需先将其转换为 ISO 或其他格式。
【解决方案4】:

使用 DateTime 参数是最好的方法。 但是,如果您仍想将 DateTime 作为字符串传递,那么只要使用与语言无关的格式,则不需要 CAST。

例如

给定一个创建的表:

create table t1 (id int, EndDate DATETIME)
insert t1 (id, EndDate) values (1, GETDATE())

以下应该始终有效:

update t1 set EndDate = '20100525' where id = 1 -- YYYYMMDD is language agnostic

以下将起作用:

SET LANGUAGE us_english
update t1 set EndDate = '2010-05-25' where id = 1

但是,这不会:

SET LANGUAGE british
update t1 set EndDate = '2010-05-25' where id = 1  

这是因为 'YYYY-MM-DD' 不是与语言无关的格式(从 SQL Server 的角度来看)。

ISO 'YYYY-MM-DDThh:mm:ss' 格式也与语言无关,在您需要传递非零时间时很有用。

更多信息:http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes

【讨论】:

    【解决方案5】:
    UPDATE TABLE
       SET EndDate = CAST('2017-12-31' AS DATE)
     WHERE Id = '123'
    

    【讨论】:

      【解决方案6】:

      如果您对指定时间不感兴趣,您也可以使用格式 'DD/MM/YYYY',但我会坚持使用 Conversion 方法及其相关的 ISO 格式,因为您确实应该避免使用默认值。

      这是一个例子:

      SET startDate = CONVERT(datetime,'2015-03-11T23:59:59.000',126) WHERE custID = 'F24'

      【讨论】:

        【解决方案7】:

        应该可以,我会在 [Date] 周围加上括号,因为它是保留关键字。

        【讨论】:

          【解决方案8】:

          是否有可能在桌子上设置触发器?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-08-08
            • 1970-01-01
            • 1970-01-01
            • 2010-11-22
            • 2019-09-18
            • 1970-01-01
            • 2018-08-31
            相关资源
            最近更新 更多