2015-05-06 4 views
6

Im неспособен заменить специальный символ. Не могли бы вы помочь мне в этом.sql server заменить специальный символ нулем

мой вход:

Mrs঩Montero 

вывод должен быть:

Mrs Montero 

Специальный символ не правильно отображения. см. изображение ниже. http://i.stack.imgur.com/b2SdY.jpg

+0

Что вы пробовали? –

+0

вы можете написать sql-функцию, которая удаляет все несимвольные значения (или вам нужны номера?) –

+2

Почему эта помеченная netezza? –

ответ

1

С source вы можете создать такую ​​функцию:

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 

SQL FIDDLE DEMO

И если у вас есть только то, что специальный символ, то вы можете использовать это:

SELECT replace('Mrs঩Montero', '঩', ' ') 

SQL FIDDLE DEMO

+0

Хотя код, который вы копируете/вставляете, удаляет специальные символы, он также удаляет символы, такие как дефис '-', который является допустимым символом в переносимых именах, поэтому не может быть лучшим решением. Код, который вы скопировали, просто удаляет все, что не является A-Z или 0-9. Я думаю, что он также удалит пробелы, которые, как мне кажется, не желательны. – Tanner

+0

@Tanner: - Действительно, я думаю, чтобы получить общее решение OP, нужно добавить еще несколько диапазонов и проверок, чтобы избежать этих специальных символов, таких как дефис. Если есть специальные специальные символы, то использование функции «replace» также хорошо. –

2

Если вы просто выбрать то сделать:

Select Replace(textct, Special_char, ' ') 
from mytable 

Если вы обновляете, то сделать это:

Update mytable 
Set textct = Replace(textct, Special_char, ' ') 

Предполагая, что эти являются nvarchars то сделать это:

Select Replace(cast(textct as varchar),cast(Special_char as varchar), ' ') 
from mytable 

Если вы хотите удалить все специальные символы, вам нужно будет использовать функцию иона, как это:

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 
+0

Привет Крис, ваше предположение верно. Это столбец nvarchar. Источник имеет более одной кодовой страницы NLS. несколько примеров: г-жа ঩ Монтеро, г-н ቙ 嫁 Белл, ׎׌א׊ דרקון ... как иврит, Uk latin9 языков. когда я пытаюсь скопировать вставку специального символа в команде замены, символ меняется. поэтому невозможно заменить. Если мы преобразуем nvarchar в varchar, тогда есть возможность изменить действительные символы NLS. Мне нужно заменить только символ.. – srinath

+0

Да, это в значительной степени то, что сделает конвертация в varchar. Это больше не позволит этим специальным персонажам, и поэтому он заберет символ и заменит его. Итак, да, если вы просто сделаете выбор «Заменить» (cast (textct как varchar) »,« ঩ »,«), то, надеюсь, вы должны увидеть некоторую радость. Удачи! –

+0

Мне нужны все специальные символы, кроме «঩». потому что его столбец nvarchar. – srinath

1

Вы можете

select 
    textct, 
    replace(textct collate Latin1_General_BIN, nchar(2473), ' ') 
from 
    mytable 
2

Создать эту функцию:

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 
Смежные вопросы