SQL Server:如何从NVarchar字段提取Account Number与SWIFT间的值?
提取SQL Server NVarchar字符串中指定区间的账号值
针对你这个需求,在SQL Server里有几种实用的方法可以精准提取Account Number:和SWIFT之间的账号值,我给你详细说明:
方法一:基础字符串函数组合(兼容所有SQL Server版本)
这是最通用的方案,不依赖高版本特性,用SUBSTRING+CHARINDEX+LEN的组合就能实现:
SELECT -- 提取目标区间的内容 SUBSTRING( YourColumnName, -- 替换成你的实际列名 -- 计算起始位置:跳过"Account Number:"及后面的空格 CHARINDEX('Account Number:', YourColumnName) + LEN('Account Number:') + 1, -- 计算截取长度:用SWIFT的起始位置减去前面的起始位置 CHARINDEX('SWIFT', YourColumnName) - (CHARINDEX('Account Number:', YourColumnName) + LEN('Account Number:') + 1) ) AS ExtractedAccountNumber FROM YourTableName; -- 替换成你的实际表名
代码说明:
CHARINDEX('Account Number:', YourColumnName):定位Account Number:在字符串中的起始位置LEN('Account Number:'):计算起始标识的长度,加1是为了跳过标识后面的空格- 最后用
SWIFT的起始位置减去前面的起始位置,得到需要截取的字符串长度
方法二:正则表达式(SQL Server 2017及以上版本)
如果你的SQL Server版本是2017或更高,可以用REGEXP_REPLACE结合正则表达式,写法更简洁:
SELECT -- 用正则捕获目标内容,并去除前后可能的空格 TRIM(REGEXP_REPLACE(YourColumnName, '.*Account Number:\s*(.*?)\s*SWIFT.*', '$1')) AS ExtractedAccountNumber FROM YourTableName;
正则说明:
.*:匹配任意字符(非贪婪模式前的前缀内容)Account Number:\s*:匹配起始标识及后面的任意空格(.*?):非贪婪捕获组,精准匹配到SWIFT前的目标内容\s*SWIFT.*:匹配SWIFT前的任意空格及后面的所有内容$1:引用捕获组的内容,也就是我们要提取的账号值
边界情况处理
如果存在字符串中没有Account Number:或SWIFT,或者两者顺序颠倒的情况,可以加判断避免返回无效值:
SELECT CASE WHEN CHARINDEX('Account Number:', YourColumnName) > 0 AND CHARINDEX('SWIFT', YourColumnName) > CHARINDEX('Account Number:', YourColumnName) THEN SUBSTRING( YourColumnName, CHARINDEX('Account Number:', YourColumnName) + LEN('Account Number:') + 1, CHARINDEX('SWIFT', YourColumnName) - (CHARINDEX('Account Number:', YourColumnName) + LEN('Account Number:') + 1) ) ELSE '未找到有效账号' END AS ExtractedAccountNumber FROM YourTableName;
内容的提问来源于stack exchange,提问作者Etienne
相关产品推荐
相关产品推荐

