SQL Server中Device列格式转换:去前导零及特殊规则处理需求
解决SQL Server Device列格式转换问题
你可以通过分步处理字符串的方式实现需求:先提取核心数字部分,拆分后去除每部分前导零,最后根据第二部分是否为双零决定拼接方式。以下是修改后的查询语句:
SELECT CASE -- 当第二部分转换为整数后为0(即原先是00),只保留处理后的第一部分 WHEN CAST(RIGHT(CoreStr, LEN(CoreStr) - CHARINDEX('_', CoreStr)) AS INT) = 0 THEN CAST(CAST(LEFT(CoreStr, CHARINDEX('_', CoreStr) - 1) AS INT) AS VARCHAR(10)) -- 否则拼接处理后的两部分,用-分隔 ELSE CONCAT( CAST(CAST(LEFT(CoreStr, CHARINDEX('_', CoreStr) - 1) AS INT) AS VARCHAR(10)), '-', CAST(CAST(RIGHT(CoreStr, LEN(CoreStr) - CHARINDEX('_', CoreStr)) AS INT) AS VARCHAR(10)) ) END AS DeviceNew FROM ( -- 第一步:提取去除DC_和末尾非数字后的核心字符串 SELECT SUBSTRING(Device, 4, LEN(Device) - PATINDEX('%[0-9]%', REVERSE(Device)) - 3 + 1) AS CoreStr FROM YourTable -- 替换为你的实际表名 ) t;
逻辑说明
- 提取核心字符串:通过
SUBSTRING和PATINDEX去掉开头的DC_和末尾的非数字字符,得到类似003_08的中间字符串。 - 拆分并去前导零:将核心字符串按
_拆分为两部分,通过CAST为整数再转回字符串的方式自动去除前导零。 - 特殊情况处理:如果第二部分是
00(转换为整数后为0),则只保留第一部分;否则拼接两部分为X-Y的格式。
内容的提问来源于stack exchange,提问作者Dr.Prog
相关产品推荐
相关产品推荐

