有人可以帮助我更好地理解这个查询吗?我想从我的字符串中删除所有特殊字符,但我不明白如何将其应用于我自己的查询。我在Stackoverflow上找到了这个查询,它似乎对某些人有效。我假设@str是我的字符串名称,但我不知道@expres代表什么。我需要选择/从语句吗?
DECLARE @str VARCHAR(400)
DECLARE @expres VARCHAR(50) = '%[~,@,#,$,%,&,*,(,),.,!]%'
SET @str = '(remove) ~special~ *characters. from string in sql!'
WHILE PATINDEX( @expres, @str ) > 0
SET @str = Replace(REPLACE( @str, SUBSTRING( @str, PATINDEX( @expres, @str ), 1 ),''),'-',' ')
从上面的代码中,您需要首先了解几件事
@
insql
是变量声明的一种形式,这意味着您为该名称分配一个值- 在这种情况下,
@express
是要从字符串中删除的字符列表。 因此,[]
内的任何内容都将在代码的下一节中搜索 PATINDEX
是一个功能,它将搜索您的@string
,以查看是否与您输入的内容匹配@express
.如果有,它将返回比赛开始的索引。- 将此条件放在
WHILE
中意味着它将遍历@string
,直到没有匹配项,这意味着所有匹配项都已删除 - 最后一行
SET
是进行删除的位置。这是使用REPLACE
完成的。 REPLACE
需要 3 个参数;您正在搜索的字符串,在本例中为@string
,您尝试替换的模式,在本例中为@expres
,最后是您将替换的模式,在本例中为' '
和'-'
REPLACE
内部的SUBSTRING
正试图找到它想要替换的第一件事。 为此,它需要找到模式的开始位置,因此它使用PATINDEX
来查找它的索引在哪里
我希望这已经足够清楚了。 你可以在这里找到 SUBSTRING PATINDEX 和 REPLACE 的文档
如果你分析SQL,你会发现你正在从@str变量中剥离字符。因此,您需要将其设置为要从中删除字符的值。
use SBLReporting
DECLARE @str VARCHAR(400)
SELECT @str = name from bbnet.customerrelationship --here you set the @str variable to your desired value
DECLARE @expres VARCHAR(50) = '%[~,@,#,$,%,&,*,(,),.,!]%'
WHILE PATINDEX( @expres, @str ) > 0 SET @str = Replace(REPLACE( @str, SUBSTRING( @str, PATINDEX( @ expres, @ str ), 1 ),''),'-',' ')
SELECT @str -- this will be your stripped value
您需要输入要去除其特殊字符的字符串作为@str。
代码段DECLARE @str VARCHAR(400)
只是简单地说@str是 varchar 类型的变量,最多可以包含 400 个字符。
假设您的字符串是"特殊字符是 $#@% 之类的东西",您的代码将是:
DECLARE @str VARCHAR(400)
DECLARE @expres VARCHAR(50) = '%[~,@,#,$,%,&,*,(,),.,!]%'
SET @str = 'Special Characters Are Things Like $#@%'
WHILE PATINDEX( @expres, @str ) > 0
SET @str = Replace(REPLACE( @str, SUBSTRING( @str, PATINDEX( @expres, @str ), 1 ),''),'-',' ')
最后执行SELECT @str
,您应该看到"特殊字符是类似的东西"作为您的输出。