2015-05-06 12 views
6

Nie można zastąpić znaku specjalnego. Czy możesz mi pomóc w tej sprawie?Serwer sql zastępuje znak specjalny wartością null

mój wkład jest:

Mrs঩Montero 

wyjście powinno być:

Mrs Montero 

specjalna postać nie jest wyświetlany poprawnie. zobacz poniższy obraz. http://i.stack.imgur.com/b2SdY.jpg

+0

Co pan spróbować? –

+0

można napisać funkcję sql, która usuwa wszystkie wartości nie będące znakami (czy też potrzebne są numery?) –

+2

Dlaczego ta tagowana netezza? –

Odpowiedz

1

Z source można utworzyć funkcję tak:

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

A jeśli masz tylko ten znak specjalny następnie można użyć to:

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

SQL FIDDLE DEMO

+0

Mimo że kod skopiowany/wklejony usuwa znaki specjalne, usunie również znaki takie jak łącznik '-', który jest poprawnym znakiem w nazwach z łącznikami, więc może nie być najlepszym rozwiązaniem. Skopiowany kod usuwa wszystko, co nie jest A-Z lub 0-9. Myślę, że usunie również spacje, które, jak sądzę, nie byłyby pożądane. – Tanner

+0

@Tanner: - Rzeczywiście, wydaje mi się, że aby uzyskać ogólne rozwiązanie, OP musi dodać więcej zakresów i kontroli, aby uniknąć specjalnych znaków, takich jak łącznik. Inaczej, jeśli istnieją pewne specjalne znaki, to dobrze jest też użyć funkcji 'replace'. –

2

Jeśli jesteś po prostu wybierając następnie zrobić:

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

Jeśli aktualizujesz następnie to zrobić:

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

Zakładając Są nvarchars następnie to zrobić:

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

Jeśli chcesz usunąć wszystkie znaki specjalne, musisz użyć funkcji jon tak:

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

Cześć Chris, twoje założenie jest poprawne. Jest to kolumna nvarchar. Źródło ma więcej niż jedną stronę kodową NLS. kilka przykładów: Pani ঩ Montero, Pan ቙ 嫁 Bell, ׎׌א׊ דרקון ... jak język hebrajski, Język łaciński9. kiedy próbuję skopiować wkleić znak specjalny w poleceniu zamiany, symbol się zmienia. więc nie można go wymienić. Jeśli skonwertujemy nvarchar na varchar, wówczas istnieje możliwość zmiany poprawnych znaków NLS. Muszę zastąpić tylko ঩ znak. – srinath

+0

Tak, właśnie to zrobi konwersja na varchar. Nie pozwoli już tym specjalnym znakom, więc podniesie ঩ znak i zastąpi go. Więc tak, jeśli po prostu wykonujesz Select Replace (cast (textct jako varchar), "঩ ',"'), to miejmy nadzieję, że powinieneś zobaczyć trochę radości. Powodzenia! –

+0

Potrzebuję wszystkich znaków specjalnych innych niż "঩". ponieważ jest to kolumna nvarchar. – srinath

1

Można

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

Tworzenie tej funkcji:

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 

Teraz można zastąpić znaki.

SELECT dbo.RemoveSpecialCharacters('abc!"¤# ?123') 

Wynik:

abc  123 
Powiązane problemy