从下面的句子
"Out of Stock - N1452002 @ £22.56"
我要提取
N1452002
并在单独的栏中显示,有人可以帮我吗?您的建议受到高度重视。
答案 0 :(得分:1)
假设字符串始终具有相同的格式,并且代码始终为8个字符,则只需要一个子字符串函数:
select substring(str, 17, 8)
这是我最想要的解释。
如果要在字符串中找到第一个“代码”,并且它遵循您指定的格式,则应该可以:
select left(stuff(str, 1, patindex('% [A-Z][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%', str
), ''), 8
)
答案 1 :(得分:0)
在SQL Server 2016中引入了string_split
:
select value from string_split('Out of Stock - N1452002 @ £22.56', ' ') where left(value, 1) = 'N'
答案 2 :(得分:0)
您可以像下面那样使用SUBSTRING
和CHARINDEX
进行播放,如果始终在所需的字符串-和空格之前,以及在所需的字符串空格和@
declare @string nvarchar(50) = 'Out of Stock - N1452002 @ £22.56'
select substring(@string, CHARINDEX('-', @string) + 2,
CHARINDEX('@', @string)-3 - CHARINDEX('-', @string))
答案 3 :(得分:0)
为了减轻最左边的文本包含@或-字符的风险,我想出了这一点。只要您现在所在位置的右边没有'-'或@, 只要现金金额不能带有-号即可。
DECLARE @TEST AS nvarchar(200) = 'Out of Stock test @chars extra - etc - N1452002 @ £22.56';
SELECT REVERSE(
RTRIM(
LEFT(
RIGHT(REVERSE(@TEST),LEN(@TEST) - CHARINDEX('@',REVERSE(@TEST))
) , charindex('-', RIGHT(REVERSE(@TEST),LEN(@TEST) - CHARINDEX('@',REVERSE(@TEST))))-1)
)
)