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