Sql 在第二次出现特定字符后获取文本

Sql 在第二次出现特定字符后获取文本,sql,sql-server,string,tsql,Sql,Sql Server,String,Tsql,我有一列数据如下: firstNameLetter_surname_numericCode 例如: m_johnson_1234 我需要提取数字代码。我尝试过使用子字符串函数,但我只得到: surname_numericCode 这是我使用的代码: SET number = substring(t2.code, charindex('_', t2.code, 2) + 1, len(t2.code)) 如何仅获取数字代码?调用CHARINDEX函数两次: SELECT SUBSTRI

我有一列数据如下:

firstNameLetter_surname_numericCode
例如:

m_johnson_1234
我需要提取数字代码。我尝试过使用子字符串函数,但我只得到:

surname_numericCode
这是我使用的代码:

SET number = substring(t2.code, charindex('_', t2.code, 2) + 1, len(t2.code))  
如何仅获取数字代码?

调用CHARINDEX函数两次:

SELECT SUBSTRING(
           code,
           NULLIF(CHARINDEX('_', code, NULLIF(CHARINDEX('_', code), 0) + 1), 0) + 1,
           LEN(code)
       )
FROM (VALUES
    ('a_b_c'),
    ('a_b')
) x(code)
调用CHARINDEX函数两次:

SELECT SUBSTRING(
           code,
           NULLIF(CHARINDEX('_', code, NULLIF(CHARINDEX('_', code), 0) + 1), 0) + 1,
           LEN(code)
       )
FROM (VALUES
    ('a_b_c'),
    ('a_b')
) x(code)

一种方法是查找反向字符串中的第一个u:

select col,
       stuff(col, 1, len(col) - charindex('_', reverse(col)) + 1, '') as numericCode
from (values ('firstNameLetter_surname_numericCode')) v(col);
如果数字代码实际上是一个数字-并且没有其他数字开始前面的值-则可以使用patindex:


一种方法是查找反向字符串中的第一个u:

select col,
       stuff(col, 1, len(col) - charindex('_', reverse(col)) + 1, '') as numericCode
from (values ('firstNameLetter_surname_numericCode')) v(col);
如果数字代码实际上是一个数字-并且没有其他数字开始前面的值-则可以使用patindex:


SUBSTR和INSTR函数可以组合起来得到数字代码

SELECT SUBSTR('m_johnson_1234', INSTR('m_johnson_1234', '_', 1, 2)+1) FROM TABLE; 
对于start_pos参数,请使用INSTR从字符串的开头开始,并查找“_”字符的第二个实例的索引。然后使用它在后面开始一个位置,并读取到字符串的末尾


如果需要的结果是数字而不是字符串,则将SUBSTR包装在to_NUMBER函数中。

可以组合SUBSTR和INSTR函数以获得数字代码

SELECT SUBSTR('m_johnson_1234', INSTR('m_johnson_1234', '_', 1, 2)+1) FROM TABLE; 
对于start_pos参数,请使用INSTR从字符串的开头开始,并查找“_”字符的第二个实例的索引。然后使用它在后面开始一个位置,并读取到字符串的末尾


如果您需要的结果是数字而不是字符串,那么请将SUBSTR包装在to_NUMBER函数中。

这里有一行代码供您使用

   select right('m_johnson_1234', charindex('_', reverse('m_johnson_1234') + '_') - 1)

这是给你的一封信

   select right('m_johnson_1234', charindex('_', reverse('m_johnson_1234') + '_') - 1)

迟来的回答,只是因为我没有看到提到PARSENAME

范例


迟来的回答,只是因为我没有看到提到PARSENAME

范例


我相信sql server中没有INSTR函数。取而代之的是查林德斯。这是解决方案方案的演示以及instr不起作用的证明:你是对的,我没有读到标签。这个解决方案可以用于oracle SQL示例,但不能用于SQL server。我相信SQL server中没有INSTR函数。取而代之的是查林德斯。这是解决方案方案的演示以及instr不起作用的证明:你是对的,我没有读到标签。此解决方案适用于oracle SQL示例,但不适用于SQL server。SET number=右选'm_johnson_1234',charindex,反转'm_johnson_1234'+-1 SET number=右选'm_johnson_1234',charindex,反转'm_johnson_1234'+-1