TRY_CONVERT()
如果您使用的是 SQL Server 2012 或更高版本,则可以使用该功能。您可以使用CONVERT文档中定义的样式。
例如,这将转换表中具有 MM/DD/YYYY 格式 (101) 的日期的每个值,该值可能是 DD/MM/YYYY 格式 (105):
SELECT TRY_CONVERT(date, VarcharColumn, 101)
FROM UnnamedTable
WHERE TRY_CONVERT(date, VarcharColumn, 101) IS NOT NULL
AND TRY_CONVERT(date, REPLACE(VarcharColumn,'/','-'), 105) IS NULL
这将转换 DDMMMYYYY 格式的每个值(最接近 106):
SELECT TRY_CONVERT(date, SUBSTRING(VarcharColumn,1,2) + ' ' + SUBSTRING(VarcharColumn,3,3) + ' ' + SUBSTRING(VarcharColumn,5,4), 106)
FROM UnnamedTable
WHERE TRY_CONVERT(date, SUBSTRING(VarcharColumn,1,2) + ' ' + SUBSTRING(VarcharColumn,3,3) + ' ' + SUBSTRING(VarcharColumn,5,4), 106) IS NOT NULL
然而,这:
我需要一个将这些 varchar 转换为日期并保留原始格式的脚本。
是一个无意义的要求。日期和时间数据类型不与任何显示格式信息一起保存。它们以二进制格式保存为日期、时间、日期时间等数据类型。如果您将该值保留为日期时间,则由客户端确定日期的显示方式。SELECT getdate()
从 SSMS运行时,是SSMS确定显示格式。SQL Server 可以通过使用CONVERT()
函数或FORMAT()
函数将字段转换为 varchar 来完成格式化。但是,一般来说,最好在应用程序中格式化日期,就像使用货币一样。