从sql table列之前和之后修剪字符

时间:2018-12-06 11:11:16

标签: sql sql-server tsql

从下面的句子

"Out of Stock  - N1452002 @ £22.56" 

我要提取

N1452002 

并在单独的栏中显示,有人可以帮我吗?您的建议受到高度重视。

4 个答案:

答案 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)

您可以像下面那样使用SUBSTRINGCHARINDEX进行播放,如果始终在所需的字符串-和空格之前,以及在所需的字符串空格和@

之后,它将起作用。
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)
                  )
                )