📜  如何在sql中获取第n个数字(1)

📅  最后修改于: 2023-12-03 15:24:36.396000             🧑  作者: Mango

如何在SQL中获取第n个数字

在SQL中,我们经常需要从字符串中获取特定位置的数字或字符。本文将介绍如何在SQL中获取第n个数字的方法。

方法1:使用SUBSTRING和PATINDEX函数

使用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
方法2:使用PARSENAME函数

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函数。根据具体情况选择适合自己的方法即可。