我有一列这样的数据:
firstNameLetter_surname_numericCode
例如:
m_johnson_1234
我需要提取数字代码。我已经尝试使用SUBSTRING函数,但是我得到了:
surname_numericCode
这是我使用的代码:
SET number = substring(t2.code, charindex('_', t2.code, 2) + 1, len(t2.code))
如何只获取数字代码?
答案 0 :(得分:1)
两次调用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)
答案 1 :(得分:1)
一种方法是在反向字符串中查找第一个_
:
select col,
stuff(col, 1, len(col) - charindex('_', reverse(col)) + 1, '') as numericCode
from (values ('firstNameLetter_surname_numericCode')) v(col);
如果数字代码实际上是一个数字-并且没有其他数字以前面的值开头-那么您可以使用patindex()
:
select col,
stuff(col, 1, patindex('%[_][0-9]%', col), '') as numericCode
from (values ('firstNameLetter_surname_0000')) v(col);
答案 2 :(得分:1)
为您提供一线服务
ungroup()
答案 3 :(得分:1)
最新答案,只是因为我没有看到提到的PARSENAME()
。
示例
Select parsename(replace(t2.code,'_','.'),1)
From YourTable
答案 4 :(得分:0)
可以将SUBSTR和INSTR函数组合在一起以获取数字代码。
SELECT SUBSTR('m_johnson_1234', INSTR('m_johnson_1234', '_', 1, 2)+1) FROM TABLE;
对于start_pos参数,请使用INSTR从字符串的开头开始,并找到'_'字符的第二个实例的索引。然后使用它在字符串之后的一个位置开始读取字符串的末尾。
如果您需要结果为数字而不是字符串,则将SUBSTR()包装在TO_NUMBER()函数中。