sql server将特殊字符替换为null
我无法替换特殊字符。你能帮我一下吗 我的意见是:sql server将特殊字符替换为null,sql,sql-server,netezza,Sql,Sql Server,Netezza,我无法替换特殊字符。你能帮我一下吗 我的意见是: MrsMontero 输出应为: Mrs Montero 特殊字符未正确显示。请看下图。 从中,您可以创建如下函数: create function dbo.RemoveSpecialChars (@s varchar(256)) returns varchar(256) with schemabinding begin if @s is null return null declare @s2 varchar
MrsMontero
输出应为:
Mrs Montero
特殊字符未正确显示。请看下图。
从中,您可以创建如下函数:
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
Create Function RemoveSpecialCharacters (@text nvarchar(max))
Returns varchar(4000)
AS
BEGIN
Declare @Return varchar(4000) = Cast(@text as varchar(4000))
While PatIndex('%[^a-z ]%', @Return) > 0
Set @Return = Stuff(@Return, PatIndex('%[^a-z ]%', @text), 1, ' ')
Return @Return
END
Select RemoveSpecialCharacters(textct) from mytable
如果只需选择,请执行以下操作:
Select Replace(textct, Special_char, ' ')
from mytable
如果要更新,请执行以下操作:
Update mytable
Set textct = Replace(textct, Special_char, ' ')
Select Replace(cast(textct as varchar),cast(Special_char as varchar), ' ')
from mytable
假设这些是NVARCHAR,则执行以下操作:
Update mytable
Set textct = Replace(textct, Special_char, ' ')
Select Replace(cast(textct as varchar),cast(Special_char as varchar), ' ')
from mytable
如果要删除所有特殊字符,需要使用如下函数:
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
Create Function RemoveSpecialCharacters (@text nvarchar(max))
Returns varchar(4000)
AS
BEGIN
Declare @Return varchar(4000) = Cast(@text as varchar(4000))
While PatIndex('%[^a-z ]%', @Return) > 0
Set @Return = Stuff(@Return, PatIndex('%[^a-z ]%', @text), 1, ' ')
Return @Return
END
Select RemoveSpecialCharacters(textct) from mytable
你可以
select
textct,
replace(textct collate Latin1_General_BIN, nchar(2473), ' ')
from
mytable
创建此函数:
CREATE function RemoveSpecialCharacters(@Temp nvarchar(4000))
returns varchar(4000)
as
BEGIN
DECLARE @KeepValues as varchar(100)
-- you can add more characters like hyphen if you also want to keep those
SET @KeepValues = '%[^A-Z0-9 ]%'
WHILE PatIndex(@KeepValues, @Temp) > 0
SET @Temp = Stuff(@Temp, PatIndex(@KeepValues, 1, ' ')
RETURN @Temp
END
现在可以替换字符了
SELECT dbo.RemoveSpecialCharacters('abc!"¤# ?123')
结果:
abc 123
尽管您复制/粘贴的代码会删除特殊字符,但它也会删除连字符
-
,这是连字符名称中的有效字符,因此可能不是最佳解决方案。您复制的代码只是删除任何不是A-Z或0-9的内容。我想它也会删除空格,但我想不会desirable@Tanner:-事实上,我想要获得通用解决方案,OP必须添加更多的范围和检查,以转义那些特殊字符,如连字符。否则,如果有一些特定的特殊字符,那么使用replace
函数也很好。您可以编写一个sql函数来删除所有非字符值(或者您也需要数字吗?)为什么要标记netezza?netezza被标记是因为。。我的来源是sql server,目标是netezza。如果我们能在netezza处理。那太好了。嗨,克里斯,你的假设是正确的。这是一个nvarchar列。源具有多个NLS代码页。几个例子:Mrs蒙特罗先生嫁贝尔。。。像希伯来语,英国拉丁语。当我尝试在replace命令中复制粘贴特殊字符时,符号正在更改。所以无法替代。如果我们将nvarchar转换为varchar,则有可能更改有效的NLS字符。我只需要更换 是的,这就是转换为varchar所要做的。它将不再允许那些特殊的角色,因此它将恢复 字符并替换它。因此,如果您只是执行一个selectreplace(cast(textct作为varchar),那么是的', ' ') 然后希望你能看到一些快乐。祝你好运!我需要所有的特殊角色,除了'. 因为它是一个nvarchar列。我的更新底部的函数应该有帮助,你也可以在这里找到类似的内容:你的函数只返回前30个字符