SQL如何提取字符串的中间部分

时间:2010-09-09 16:23:01

标签: sql sql-server sql-server-2005

我想只从这个字符串中获取单位号码:

'<p>The status for the Unit # 3546 has changed from % to OUTTOVENDOR</p>'

音符始终完全相同,但单位编号会发生变化。如何仅提取单元号?

谢谢!

6 个答案:

答案 0 :(得分:6)

declare @String varchar(500)

set @String = '<p>The status for the Unit # 3546 has changed from % to OUTTOVENDOR</p>'

select SUBSTRING(@String, charindex('# ', @String) + 2, charindex('has changed', @String) - charindex('# ', @String) - 2)

答案 1 :(得分:1)

尝试:

  declare @S VarChar(1000)
  Set @S = 
  '<p>The status for the Unit # 3546 has changed from % to OUTTOVENDOR</p>'
  Select Substring( @s, 
         charIndex('#', @S)+1, 
         charIndex('has', @S) - 2 - charIndex('#', @S)) 

答案 2 :(得分:0)

您可以通过多种方式执行此操作,使用REPLACE函数去除任何一方,如果您确保知道索引号,则使用SUBSTRING或将SUBSTRING与CHARINDEX混合使用。

答案 3 :(得分:0)

select substring(note, len('<p>The status for the Unit # '),4) from tbl

答案 4 :(得分:0)

这样的东西应该工作SUBSTRING(val,30,CHARINDEX('',val,30)-30)

答案 5 :(得分:0)

这是使用PATINDEX的版本。它查找字符串中的第一个数字。

declare @MyString varchar(100) 
set @MyString = '<p>The status for the Unit # 3546 has changed from % to OUTTOVENDOR</p>'

select PATINDEX('%[0-9]%', @MyString), PATINDEX('%[^0-9]%', SUBSTRING(@MyString, PATINDEX('%[0-9]%', @MyString), len(@MyString)))

select SUBSTRING (@MyString, PATINDEX('%[0-9]%', @MyString),
    PATINDEX('%[^0-9]%', SUBSTRING(@MyString, PATINDEX('%[0-9]%', @MyString), len(@MyString))))