📅  最后修改于: 2023-12-03 15:24:36.396000             🧑  作者: Mango
在SQL中,我们经常需要从字符串中获取特定位置的数字或字符。本文将介绍如何在SQL中获取第n个数字的方法。
使用SUBSTRING和PATINDEX函数组合可以获得字符串中的第n个数字。以下是语法:
SUBSTRING(string, PATINDEX('%[0-9]%', string + ' '), LEN(string))
其中,string是要搜索的字符串,[0-9]是搜索的正则表达式,+ ' '向字符串末尾添加空格以确保搜索匹配到数字而不是其他字符。
下面是一个例子,我们从“ABC123DEFG”中提取第3个数字:
DECLARE @string varchar(50) = 'ABC123DEFG'
DECLARE @n int = 3
SELECT SUBSTRING(@string, PATINDEX('%[0-9]%', @string + ' '), LEN(@string)) -- 获取字符串中所有数字
SELECT SUBSTRING(@string, PATINDEX('%[0-9]%', @string + ' '),
PATINDEX('%[0-9]%', REPLACE(@string, SUBSTRING(@string, PATINDEX('%[0-9]%', @string + ' '), LEN(@string)), '') + ' ')
- PATINDEX('%[0-9]%', @string + ' ') + 1) -- 获取字符串中第一个数字
SELECT SUBSTRING(@string, PATINDEX('%[0-9]%', @string + ' '),
CHARINDEX(' ', REPLACE(@string, SUBSTRING(@string, PATINDEX('%[0-9]%', @string + ' '), LEN(@string)), '') + ' ')
- PATINDEX('%[0-9]%', @string + ' ')) -- 获取字符串中第n个数字
输出如下:
123
1
3
PARSENAME函数主要用于解析对象名称,但是也可以用于解析字符串。以下是语法:
PARSENAME(REPLACE(string, '.', ','), n)
其中,string是要解析的字符串,.被替换为,以便处理,n是与.分隔符分隔的组件的位置。
下面是一个例子,我们从“ABC.123.DEG”中提取第2个数字:
DECLARE @string varchar(50) = 'ABC.123.DEG'
DECLARE @separator char(1) = '.'
DECLARE @n INT = 2
SELECT PARSENAME(REPLACE(@string, @separator, ','), @n)
输出如下:
123
这篇文章介绍了两种在SQL中获取字符串中第n个数字的方法:使用SUBSTRING和PATINDEX函数组合以及使用PARSENAME函数。根据具体情况选择适合自己的方法即可。