如何为SQL表nvarchar类型编码补全小数点实现两表关联匹配
nvarchar类型诊断编码补全小数点匹配方案
注意:请勿使用
decimal(10,2)处理该字段,由于字段值包含英文字母,强转数值类型会直接触发转换失败报错。
两种实现路径可按需选择:
方案1:关联时动态匹配(推荐,不修改原始导入数据)
无需提前修改表2存储的原始导入值,直接在关联条件中移除表1编码的小数点做等值匹配即可,原始导入数据完整保留,方便后续排查导入异常。
基础关联查询示例:
SELECT t1.diagnosis_codes, t2.codes FROM 表1 t1 INNER JOIN 表2 t2 ON REPLACE(t1.diagnosis_codes, '.', '') = t2.codes;
如果需要在查询结果中直接输出表2编码带小数点的标准格式,可通过字符串截取拼接实现,逻辑为取编码前3位字符,拼接小数点后,拼接第4位开始的所有剩余字符:
SELECT t1.diagnosis_codes, t2.codes AS original_import_code, CONCAT(LEFT(t2.codes, 3), '.', SUBSTRING(t2.codes, 4, LEN(t2.codes)-3)) AS standard_code FROM 表1 t1 INNER JOIN 表2 t2 ON REPLACE(t1.diagnosis_codes, '.', '') = t2.codes;
用给出的示例值验证拼接逻辑:
- 表2原始值
N926:前3位为N92,第4位开始的剩余字符为6,拼接结果为N92.6,与表1对应编码完全一致 - 表2原始值
Z3201:前3位为Z32,第4位开始的剩余字符为01,拼接结果为Z32.01,与表1对应编码完全一致
方案2:持久化更新表2字段,永久补全小数点
如果需要将表2的codes字段永久修改为带小数点的标准格式,建议先通过查询验证拼接结果,确认无异常后再执行更新操作,避免误改数据。
-- 第一步:查询预览修改后的结果,确认所有编码转换符合预期 SELECT codes AS original_code, CONCAT(LEFT(codes, 3), '.', SUBSTRING(codes, 4, LEN(codes)-3)) AS updated_code FROM 表2; -- 第二步:确认预览结果无误后,执行更新语句 UPDATE 表2 SET codes = CONCAT(LEFT(codes, 3), '.', SUBSTRING(codes, 4, LEN(codes)-3));
更新完成后,两表可直接通过编码字段做等值关联:
SELECT * FROM 表1 t1 INNER JOIN 表2 t2 ON t1.diagnosis_codes = t2.codes;
内容的提问来源于stack exchange,提问作者Ashley Daniel
相关产品推荐
相关产品推荐

