有人可以帮助我更好地理解这个查询吗?我想从我的字符串中删除所有特殊字符,但我不明白如何将它应用于我自己的查询。我在Stackoverflow上发现了这个查询,它似乎适用于某些人。我假设@str是我的字符串名称,但我不知道@expres代表什么。我需要一个select / from语句吗?
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 ),''),'-',' ')
答案 0 :(得分:1)
从上面的代码中,您需要先了解一些事项
@
中的sql
是变量声明的一种形式,这意味着您为该名称指定了值@express
是您要从字符串中删除的字符列表。因此,[]
内的任何内容都将在代码的下一部分中进行搜索PATINDEX
是一项功能,可以搜索您的@string
,看看是否与@express
中的内容匹配。如果有,它将返回比赛开始的索引。WHILE
内意味着它将循环遍历@string
,直到没有匹配为止,这意味着所有匹配项都已删除SET
行是删除发生的地方。这是使用REPLACE
完成的。REPLACE
有3个参数;您正在搜索的字符串,在本例中为@string
,您要替换的模式,在本例中为@expres
,最后您将替换它,在本例中为' '
和'-'
SUBSTRING
内的REPLACE
正试图找到它想要替换的第一件事。要做到这一点,它需要找到模式开始的位置,因此它使用PATINDEX
来查找其索引的位置答案 1 :(得分:1)
如果分析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
答案 2 :(得分:0)
您需要输入要删除其特殊字符的字符串@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
,您应该看到"特殊字符就像"作为你的输出。