Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Nicht numerische Zeichen aus einer Zeichenfolge entfernen

Sie können dies in einer einzigen Anweisung tun. Mit mehr als 200 REPLACEs erstellen Sie nicht wirklich ein Statement, oder?!

update tbl
set S = U.clean
from tbl
cross apply
(
    select Substring(tbl.S,v.number,1)
    -- this table will cater for strings up to length 2047
    from master..spt_values v
    where v.type='P' and v.number between 1 and len(tbl.S)
    and Substring(tbl.S,v.number,1) like '[0-9]'
    order by v.number
    for xml path ('')
) U(clean)

Arbeiten mit SQL Fiddle zeigt diese Abfrage mit Beispieldaten

Unten für die Nachwelt repliziert:

create table tbl (ID int identity, S varchar(500))
insert tbl select 'asdlfj;390312hr9fasd9uhf012  3or h239ur ' + char(13) + 'asdfasf'
insert tbl select '123'
insert tbl select ''
insert tbl select null
insert tbl select '123 a 124'

Ergebnisse

ID  S
1   390312990123239
2   123
3   (null)
4   (null)
5   123124