Transact SQL替换部分字符串

时间:2014-07-10 06:17:48

标签: sql sql-server tsql

是否可以在SQL查询中使用regexp(或其他东西,可能像CHARINDEX可能有帮助)删除部分字符串? 我使用MS SQL Server(最有可能是2008年)。

示例:
我的字符串类似于" [一些无用的信息] 字符串的有用部分"如果它们在一行中,我想删除括号中带有文本的部分。

5 个答案:

答案 0 :(得分:3)

使用 REPLACE

例如:

  UPDATE authors SET city = replace(city, 'To Remove', 'With BLACK or Whatever')
  WHERE city LIKE 'Salt%';  // with where condition

答案 1 :(得分:2)

您可以使用PATINDEX功能。它不是一个完整的正则表达式实现,但你可以将它用于简单的事情。

  

<强> PATINDEX (Transact-SQL) &GT;返回指定表达式中第一次出现模式的起始位置,如果未找到该模式,则返回所有有效文本和字符数据类型的零。

OR 您可以使用CLR通过完整的正则表达式实现来扩展SQL Server。

答案 2 :(得分:1)

SELECT * FROM temp where replace(replace(replace(url,'http://',''),'www.',''),'https://','')='"+url+"';

答案 3 :(得分:1)

您可以使用STUFF将字符串插入另一个字符串。它删除起始位置的第一个字符串中指定长度的字符,然后将第二个字符串插入起始位置的第一个字符串中。

例如,下面的代码将5替换为666666

DECLARE @Variable NVARCHAR(MAX) = '12345678910'

SELECT STUFF(@Variable, 5, 1, '666666')

请注意,第二个参数不是字符串,而是position,您可以使用CHARINDEX来计算它的位置。


以下是您的情况:

DECLARE @Variable NVARCHAR(MAX) = '[some useless info] Useful part of string'

SELECT STUFF(
               @Variable
              ,CHARINDEX('[', @Variable)
              ,LEN(SUBSTRING(@Variable, CHARINDEX('[', @Variable), CHARINDEX(']', @Variable) - LEN(SUBSTRING(@Variable, 0, CHARINDEX('[', @Variable)))))
              ,''
            )

答案 4 :(得分:1)

最后帮助REPLACE,SUBSTRING和PATINDEX。

REPLACE(t.badString, Substring(t.badString , Patindex('%[%' , t.badString)+1 , Patindex('%]%' , t.badString)), '').

感谢所有人。