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

如何将格式为'10:50:PM'的nvarchar类型转换为time类型?

解决nvarchar格式时间转time类型失败的问题

核心问题是你的表中存在无效格式的时间字符串,导致CAST/CONVERT或修改列类型时触发转换错误。以下是分步解决方法:

1. 定位无效数据

首先用TRY_CONVERT函数找出所有无法转换为time类型的行(该函数转换失败时返回NULL):

SELECT open, close
FROM 你的表名
WHERE TRY_CONVERT(time, open) IS NULL 
   OR TRY_CONVERT(time, close) IS NULL

检查这些结果,常见的无效格式包括:拼写错误(如把PM写成PMM)、格式不符(如缺少冒号、小时超过12)、空值或乱码等,手动修正这些数据。

2. 转换列类型(两种方法)

方法一:安全过渡(推荐)

先新增临时time列,转换数据后再替换原列:

-- 添加临时time列
ALTER TABLE 你的表名 ADD open_time time, close_time time;

-- 转换数据到临时列
UPDATE 你的表名 
SET open_time = CONVERT(time, open),
    close_time = CONVERT(time, close);

-- 验证数据无误后,删除原列并重命名临时列
ALTER TABLE 你的表名 DROP COLUMN open, close;
EXEC sp_rename '你的表名.open_time', 'open', 'COLUMN';
EXEC sp_rename '你的表名.close_time', 'close', 'COLUMN';

方法二:直接修改列类型(需确保所有数据有效)

确认所有数据都能正确转换后,直接修改列类型:

ALTER TABLE 你的表名 ALTER COLUMN open time;
ALTER TABLE 你的表名 ALTER COLUMN close time;

3. 查询时临时转换(无需修改表结构)

如果暂时不想修改表结构,查询时用TRY_CONVERT避免报错:

SELECT TRY_CONVERT(time, open) AS open_time,
       TRY_CONVERT(time, close) AS close_time
FROM 你的表名;

无效数据会显示为NULL,不影响整个查询执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 01:37:08