这是查找字符串的示例代码是否包含特殊字符。你可以试试这个
DECLARE @MyString VARCHAR(100)
SET @MyString = 'abcdef&&&&ybyds'
IF (@MyString LIKE '%[^a-zA-Z0-9]%')
BEGIN
SET @MyString = Replace(@MyString,'&',' ')
PRINT 'Contains "special" characters'
PRINT @MyString
END
ELSE
BEGIN
PRINT 'Does not contain "special" characters'
PRINT @MyString
END
而且你的UPDATE查询将是这样的: -
UPDATE [BuildingPros].[utbProfessionals]
SET [ProfessionalName] =
(
CASE
WHEN [ProfessionalName] LIKE '%[^a-zA-Z0-9]%'
THEN Replace(REPLACE(ProfessionalName, SUBSTRING(ProfessionalName, PATINDEX('%[~,@,#,$,%,&,*,^,&,%,*,(,)]%', ProfessionalName), 1),''),'-',' ')
ELSE [ProfessionalName]
END
)
,或者可以创建一个函数来删除特殊字符函数然后调用它在Update语句。
1)从字符串值中移除特殊字符。 2)除0-9,a-z和A-Z以外的所有字符被删除,并且3)其余字符被返回。
create function dbo.RemoveSpecialChars (@s varchar(256)) returns varchar(256)
with schemabinding
begin
if @s is null
return null
declare @s2 varchar(256)
set @s2 = ''
declare @l int
set @l = len(@s)
declare @p int
set @p = 1
while @p <= @l begin
declare @c int
set @c = ascii(substring(@s, @p, 1))
if @c between 48 and 57 or @c between 65 and 90 or @c between 97 and 122
set @s2 = @s2 + char(@c)
set @p = @p + 1
end
if len(@s2) = 0
return null
return @s2
end
然后调用这个函数在更新语句: -
UPDATE [BuildingPros].[utbProfessionals]
SET [ProfessionalName] =
(
CASE
WHEN [ProfessionalName] LIKE '%[^a-zA-Z0-9]%'
THEN (SELECT dbo.RemoveSpecialChars(ProfessionalName))
ELSE [ProfessionalName]
END
)
Refer
我会解决的基本*危险字符不允许*问题(你应说明这一点),而不是改变。数据。如果处理正确,您应该不会遇到问题 –
我会在用户第一次创建公司名称和更新其名称的区域发表该声明,但现在,我需要修正嘘声。 –
@ AlexK。的观点是数据库应该允许用户想要的任何字符。当您从数据库中读取数值时,应该对软件中的任何“坏字符”进行过滤。 – dg99