Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Supprimer les caractères non numériques d'une chaîne

Vous pouvez le faire en une seule instruction. Vous n'êtes pas vraiment en train de créer une déclaration avec plus de 200 replaces, n'est-ce pas ? !

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)

Fonctionnement SQL Fiddle montrant cette requête avec des exemples de données

Répliqué ci-dessous pour la postérité :

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'

Résultats

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