SQL Server DATE字段仅支持YYYY-MM-DD,如何兼容DD-MM-YYYY格式?
解决SQL Server DATE字段插入DD-MM-YYYY格式日期的问题
出现这个错误是因为SQL Server默认的日期解析规则(比如DATEFORMAT设置为MDY,即月-日-年)会把26-12-2022里的26当成月份,显然超出了1-12的范围,所以触发Msg 241转换失败。而YYYY-MM-DD是ISO标准日期格式,不受会话设置影响,所以能正常插入。
以下是几种让字段支持DD-MM-YYYY格式插入的方法:
显式用CONVERT函数转换
插入时指定转换样式码103(对应DD/MM/YYYY格式,横杠分隔符也兼容),强制SQL Server按日-月-年的规则解析字符串:INSERT INTO datetime2022 (ΗΜΕΡΟΜΗΝΙΑ) VALUES (CONVERT(DATE, '26-12-2022', 103));修改当前会话的日期格式
执行SET DATEFORMAT命令把会话的日期解析规则改成DMY(日-月-年),之后当前会话里直接插入DD-MM-YYYY格式的字符串就能正常识别:SET DATEFORMAT DMY; INSERT INTO datetime2022 (ΗΜΕΡΟΜΗΝΙΑ) VALUES ('26-12-2022');注意:这个设置只对当前连接会话有效,断开连接后会恢复默认值。
用TRY_CONVERT做安全转换(可选)
如果担心输入的日期字符串可能存在格式不规范的情况,可以用TRY_CONVERT替代CONVERT,转换失败时会返回NULL而不是触发错误,适合容错场景:INSERT INTO datetime2022 (ΗΜΕΡΟΜΗΝΙΑ) VALUES (TRY_CONVERT(DATE, '26-12-2022', 103));(如果字段不允许NULL,可以结合
ISNULL或额外逻辑处理转换失败的情况)
内容的提问来源于stack exchange,提问作者John Jepeto
相关产品推荐
相关产品推荐

