SQL中提取字符串特定值:获取InstalmentScheme对应数字值
用SQL提取InstalmentScheme对应的数字值
对于像[AV] Z_Prem_454-3000_XXXXX_800+ [InstalmentScheme 6]这样格式的字符串,你可以用以下SQL语句替代原来的C#代码完成数字提取,同时覆盖空值等异常场景:
SQL Server 实现示例
SELECT CASE -- 输入为空或NULL时返回null WHEN input_string IS NULL OR input_string = '' THEN NULL ELSE CASE -- 字符串里没空格的话返回空字符串 WHEN CHARINDEX(' ', REVERSE(input_string)) = 0 THEN '' ELSE -- 截取最后一个空格到末尾]之间的内容,去空格后校验是否为数字 CASE WHEN TRY_CAST( LTRIM(RTRIM( SUBSTRING( input_string, LEN(input_string) - CHARINDEX(' ', REVERSE(input_string)) + 2, CHARINDEX(']', REVERSE(input_string)) - CHARINDEX(' ', REVERSE(input_string)) - 1 ) )) AS INT ) IS NOT NULL THEN LTRIM(RTRIM( SUBSTRING( input_string, LEN(input_string) - CHARINDEX(' ', REVERSE(input_string)) + 2, CHARINDEX(']', REVERSE(input_string)) - CHARINDEX(' ', REVERSE(input_string)) - 1 ) )) ELSE NULL END END END AS InstalmentSchemeNumber FROM your_table;
逻辑对应说明
完全匹配你原来C#代码的逻辑:
- 输入为空/
NULL时返回NULL - 字符串里找不到空格时返回空字符串
- 精准截取最后一个空格到末尾
]前的内容,去除前后空格 - 校验截取内容是否为数字,是则返回,否则返回
NULL
原C#代码(中文注释版)
public static string Extract(string input) { // 输入为空或NULL时返回null if (string.IsNullOrEmpty(input)) return null; // 定位最后一个空格的位置 var lastIndex = input.LastIndexOf(' '); // 找不到空格时返回空字符串 if (lastIndex < 0) return ""; // 截取最后一个空格到倒数第一个字符(去掉末尾的]),并去除前后空格 var code = input[lastIndex..^1].Trim(); // 校验是否为数字,是则返回该值,否则返回null return CheckingIfNumber(code) ? code : null; }
内容的提问来源于stack exchange,提问作者Pratex
相关产品推荐
相关产品推荐

