2015-06-25 20 views
7

Ich möchte alle Zeile in neue Spalte kopieren und dabei alle Sonderzeichen durch - ersetzen. Mein Code ist unten.Alle Sonderzeichen in SQL suchen und ersetzen

Mein Tischdesign

enter image description here

select * from mycode 
    UPDATE mycode 
    SET newName = Replace(myname, '%[^0-9a-zA-Z]%', '-') 

Es Kopie mit meinem Code bekommen, aber die Sonderzeichen werden nicht ersetzt

Ergebnis enter image description here

+2

Leider nicht so etwas ersetzen Sie diese Abfrage wie regex ist es tun zu schaffen. Wünschen Sie eines Tages Microsoft wird diese Funktion hinzufügen ... –

+1

dies kann http://stackoverflow.com/questions/1007697/how-to-strip-all-non-alphabetic-characters-from-string-in-sql-server helfen – Sachin

+2

Nun, es gibt keine RegEx, die vorinstalliert ist. Sie können jedoch 'CLR'-RegEx-Funktionen installieren. Richtlinien finden Sie hier: https://www.simple-talk.com/sql/t-sql-programming/clr-assembly-regex-functions-for-sql-server-by-example/ Ich finde sie in der Regel sehr nützlich zumindest ersetzen. –

Antwort

4

Versuchen Sie, diese Funktion

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 

und dann UPDATE

UPDATE mycode 
    SET newName = dbo.RemoveSpecialChars(mycode) 
+0

Nicht bekommen das Ergebnis können Sie dies ohne Funktion machen –

+0

Vielen Dank! Das hat perfekt funktioniert. Werden dadurch auch die TM- und Copyright-Zeichen entfernt? – eripey

5

Versuchen

DECLARE @specialchar varchar(15) 
DECLARE @getspecialchar CURSOR 
SET @getspecialchar = CURSOR FOR 
SELECT DISTINCT poschar 
    FROM MASTER..spt_values S 
      CROSS APPLY (SELECT SUBSTRING(newName ,NUMBER,1) AS poschar from mycode) t 
    WHERE NUMBER > 0 

      AND NOT (ASCII(t.poschar) BETWEEN 65 AND 90 
        OR ASCII(t.poschar) BETWEEN 97 AND 122 
        OR ASCII(t.poschar) BETWEEN 48 AND 57) 

OPEN @getspecialchar 
FETCH NEXT 
FROM @getspecialchar INTO @specialchar 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    UPDATE mycode 
     SET newName =Replace(myname,@specialchar,'') 
FETCH NEXT 
FROM @getspecialchar INTO @specialchar 
END 
CLOSE @getspecialchar 
DEALLOCATE @getspecialchar 
+0

Mukesh kalgude: zwei Stimmen geben zu Ihrer Antwort, aber ich bekomme nicht das Ergebnis –