SSMS中提取SQL临时表字符串末尾1-3位数字至新列
解决方案
不需要使用IF语句,直接利用SQL Server的字符串函数就能高效实现需求。以下是具体方法:
方法1:查询时直接提取结果
使用REVERSE、CHARINDEX和SUBSTRING组合定位最后一个下划线后的内容,再通过TRY_CAST确保只保留有效数字(避免非数字结尾的情况报错):
SELECT Description, TRY_CAST(SUBSTRING(Description, LEN(Description) - CHARINDEX('_', REVERSE(Description)) + 2, 3) AS INT) AS EndNumber FROM #testTempTbl1;
逻辑说明:
REVERSE(Description):反转字符串,把末尾的下划线转为开头第一个下划线CHARINDEX('_', REVERSE(Description)):获取反转后第一个下划线的位置,对应原字符串最后一个下划线的位置LEN(Description) - CHARINDEX('_', REVERSE(Description)) + 2:计算原字符串中最后一个下划线之后的起始截取位置SUBSTRING(..., 3):最多截取3位,匹配你需要的1-3位数字需求TRY_CAST:若末尾不是数字,返回NULL,避免查询中断
方法2:给临时表添加新列并填充数据
如果需要在临时表生命周期内永久保存结果,可以新增列后批量更新:
-- 添加存储结果的新列 ALTER TABLE #testTempTbl1 ADD EndNumber INT; -- 填充数据 UPDATE #testTempTbl1 SET EndNumber = TRY_CAST(SUBSTRING(Description, LEN(Description) - CHARINDEX('_', REVERSE(Description)) + 2, 3) AS INT);
补充说明:
如果能保证Description列所有值的最后一个下划线后都是1-3位数字,可以去掉TRY_CAST,直接截取后转换为INT,或保留字符串类型(无需数值运算时)。
内容的提问来源于stack exchange,提问作者Drop05
相关产品推荐
相关产品推荐

