求助:将nvarchar(max)类型的日期时间数据转换为datetime类型
解决nvarchar日期转datetime的问题
你的数据是日/月/年 时分秒格式,直接转换失败是因为SQL Server默认的日期解析逻辑(月/日/年)无法识别日大于12的情况,以下是可行的解决方法:
1. 直接转换单条数据
使用CONVERT函数并指定格式代码103(对应英国/法国日期格式:dd/mm/yyyy),可以正确解析带时间的字符串:
SELECT CONVERT(datetime, ReportDateTime, 103) AS ConvertedDateTime FROM YourTableName;
2. 批量转换并替换原列
如果需要永久将列类型改为datetime,可以按以下步骤操作:
-- 1. 添加一个临时datetime类型的列 ALTER TABLE YourTableName ADD Temp_DateTime datetime; -- 2. 将原nvarchar数据转换后写入新列 UPDATE YourTableName SET Temp_DateTime = CONVERT(datetime, ReportDateTime, 103); -- 3. 验证转换无误后,删除原nvarchar列 ALTER TABLE YourTableName DROP COLUMN ReportDateTime; -- 4. 将临时列重命名为原列名 EXEC sp_rename 'YourTableName.Temp_DateTime', 'ReportDateTime', 'COLUMN';
3. 排查无效数据
如果存在格式错误的行,使用TRY_CONVERT函数可以避免整体报错,同时筛选出转换失败的行以便修正:
SELECT ReportDateTime AS InvalidDateString FROM YourTableName WHERE TRY_CONVERT(datetime, ReportDateTime, 103) IS NULL;
内容的提问来源于stack exchange,提问作者Imran Aslam
相关产品推荐
相关产品推荐

