sql >> Databasteknik >  >> RDS >> Sqlserver

Ta bort icke-numeriska tecken från en sträng

Du kan göra detta i ett enda uttalande. Du skapar väl inte riktigt ett uttalande med 200+ ERSÄTTNINGAR?!

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)

Fungerar SQL Fiddle visar den här frågan med exempeldata

Replikeras nedan för eftervärlden:

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'

Resultat

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


  1. skicka heltalsarray till oracle-proceduren med c#

  2. Hur visar man rader med noll antal i mySQL-grupp efter fråga?

  3. Vad är en effektiv metod för att bläddra igenom mycket stora resultatuppsättningar i SQL Server 2005?

  4. Integrera ServiceNow med Oracle Identity Cloud Service (IDCS)