Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Retirar caracteres não numéricos de uma string


Você pode fazer isso em uma única instrução. Você não está realmente criando uma declaração com mais de 200 REPLACEs, está?!
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)

Trabalhando SQL Fiddle mostrando esta consulta com dados de exemplo

Replicado abaixo para a posteridade:
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'

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