首页 > 解决方案 > 从字符串 yyyy-mm-dd HH:mm:ss.fff 更新 DateTime 字段会导致错误

问题描述

我正在尝试从 yyyy-mm-dd HH:mm:ss.fff 类型的字符串更新日期时间字段,但没有成功:

UPDATE MyTable
   SET MyDateTimeField = CAST('2021-02-20 00:00:00.000' AS DATETIME)
 WHERE MyCondition

以下是我得到的错误:

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围

标签: sql-serverdatetime

解决方案


不要那样写日期时间值。它们对所有设置都不安全。改为这样做:

UPDATE MyTable
   SET MyDateTimeField = '20210220'
 WHERE MyCondition';

这适用于所有区域设置和所有与日期相关的数据类型。我还假设您不想要时间组件。如果这样做,请使用以下格式:

UPDATE MyTable
   SET MyDateTimeField = '20210220 23:10:15'
 WHERE MyCondition;

唯一安全的其他选项是完整的 ISO8601T 格式(但必须包括 T 部分)。


推荐阅读