适配Microsoft SSMS的SQL查询:提取指定单词前的数字
提取'Test'前的目标数字(兼容Microsoft SSMS的SQL实现)
需求说明
需要从指定字符串中提取紧邻单词'Test'之前的数字(支持整数和小数格式),若字符串不含'Test'则输出无内容提示。
原始数据
String 1: 'Random Text 3 Random 568 Text 5.5 Test Random Text 345' String 2: 'Random Text 3 Test Text Random' String 3: 'Random Text 777 Random Text'
预期输出
String 1: '5.5' String 2: '3' String 3: 无输出内容
实现SQL语句
假设数据存储在表test_strings中,字段id用于标识字符串序号,content存储目标字符串,以下是兼容SQL Server(SSMS)的查询语句:
SELECT id AS '序号', CASE WHEN CHARINDEX('Test', content) = 0 THEN '无输出内容' ELSE REVERSE(SUBSTRING(REVERSE(SUBSTRING(content, 1, CHARINDEX('Test', content)-1)), 1, PATINDEX('%[^0-9.]%', REVERSE(SUBSTRING(content, 1, CHARINDEX('Test', content)-1)) + ' ') - 1)) END AS '提取结果' FROM test_strings;
逻辑解释
- 检测'Test'是否存在:通过
CHARINDEX('Test', content)判断字符串是否包含目标单词,返回0则直接输出提示内容。 - 截取'Test'左侧内容:用
SUBSTRING获取'Test'之前的所有字符。 - 定位数字边界:将左侧内容反转后,通过
PATINDEX找到第一个非数字/小数点的字符,确定目标数字的长度。 - 还原数字格式:截取反转后的数字部分,再次反转得到原始格式的目标数字。
内容的提问来源于stack exchange,提问作者Lloyd Thomas
相关产品推荐
相关产品推荐

