SQL Server中提取ID类编号并截取其最后4位数字的方法
SQL Server提取ID编号最后四位数字的解决方案
问题分析
你之前的代码仅匹配ID0开头且长度固定的格式,无法处理ID后带空格、长度不固定的情况,所以得换思路:先精准提取所有以ID开头的编号段(含中间可能的空格),再清理空格,最后取最后四位数字。
可行SQL代码
SELECT [column], RIGHT(REPLACE(SUBSTRING( [column], PATINDEX('%ID%', [column]), PATINDEX('%[^0-9 ]%', SUBSTRING([column], PATINDEX('%ID%', [column]) + 2, LEN([column])) + ' ') + 2 ), ' ', ''), 4) AS LastFourIDDigits FROM your_table_name;
代码拆解
- 定位ID起始位置:
PATINDEX('%ID%', [column])找到字符串中第一个ID的起始索引。 - 提取完整ID编号段:
- 从
ID位置开始,往后匹配第一个非数字、非空格的字符(PATINDEX('%[^0-9 ]%', ...)),以此确定ID编号段的结束位置。 - 末尾加
' '是为了避免ID段在字符串末尾时,PATINDEX返回0导致提取失败。
- 从
- 清理空格:
REPLACE(..., ' ', '')把ID段内的空格全部移除,比如将ID00 7120转为ID007120。 - 截取最后四位:
RIGHT(..., 4)直接获取处理后字符串的最后四位数字。
示例验证
用你提供的测试数据执行后,结果如下:
| 原字符串 | LastFourIDDigits |
|---|---|
| Brian Larry, Hays Hill XX, ID007370, Option code - 0123 4567, AAA - XX | 7370 |
| ID007366 - Dave Jones - XX - Option Code 0121 9999 | 7366 |
| ID00 7120 Brian Smith XX Branded company | 7120 |
| ID07113 Gary Barnes - LLL 0123 9111 AAA LLL | 7113 |
| ID00 7120 Charles Old XX Recall operation | 7120 |
| ID0007439 - Kerry Hill - Maidstone XX - Option Code 0124 234 BBB XX | 7439 |
| ID006817 Paul George Jackson 1234 8464 AAA Recall operation | 6817 |
特殊情况处理
如果ID段数字不足四位(比如ID123),RIGHT会直接返回全部数字;若字符串中无ID开头的段,结果为NULL,可通过ISNULL(RIGHT(...), '无匹配ID')设置默认值。
内容的提问来源于stack exchange,提问作者Blowers
相关产品推荐
相关产品推荐

