You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中如何将格式为'dd/mm/yyyy hh:mm:ss'的varchar类型转换为datetime类型?

解决Varchar转Datetime时的“超出范围”错误

这问题我之前踩过坑!核心原因是SQL Server默认的日期转换规则是美式的mm/dd/yyyy,而你的数据是欧式的dd/mm/yyyy格式——比如如果有一条数据是31/01/2024 10:30:00,SQL会把第一个31当成月份,自然就触发“超出范围”的错误了。

给你几个靠谱的解决方案:

1. 用CONVERT指定欧式日期样式

SQL Server内置了样式码,103对应的就是dd/mm/yyyy格式(英式/欧式),直接用它转换就能匹配你的数据:

SELECT CONVERT(DATETIME, TSTAMP, 103) AS DATE

时间部分会被自动识别,不用额外处理。

2. 用TRY_CONVERT处理脏数据(SQL Server 2012+)

如果你的数据里有格式错误的行(比如32/13/2024这种无效日期),普通的CONVERT会直接报错中断查询。这时候用TRY_CONVERT更安全,转换失败的行会返回NULL,不会影响整个查询:

SELECT TRY_CONVERT(DATETIME, TSTAMP, 103) AS DATE

你还可以用它找出所有格式错误的行:

SELECT TSTAMP
FROM YourTableName
WHERE TRY_CONVERT(DATETIME, TSTAMP, 103) IS NULL

3. 用PARSE指定文化(SQL Server 2012+)

另一种更直观的方式是用PARSE函数,直接指定文化为英式(en-GB),它会自动识别dd/mm/yyyy格式:

SELECT PARSE(TSTAMP AS DATETIME USING 'en-GB') AS DATE

不过PARSE的性能比CONVERT稍差一点,数据量特别大的时候优先选CONVERT。

试试上面的方法,应该就能解决你的转换问题啦!

内容的提问来源于stack exchange,提问作者Wolowizard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 08:57:31