Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tách các ký tự không phải số khỏi một chuỗi

Bạn có thể làm điều này trong một câu lệnh duy nhất. Bạn không thực sự tạo ra một tuyên bố với hơn 200 THAY THẾ phải không ?!

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)

Làm việc SQL Fiddle hiển thị truy vấn này với dữ liệu mẫu

Nhân rộng dưới đây cho hậu thế:

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'

Kết quả

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chọn bản ghi cuối cùng từ bảng bằng cách sử dụng nhóm theo

  2. Sử dụng hàm Chuyển đổi sql tích hợp trong tiêu chí nhibernate

  3. Không sử dụng sp_depends trong SQL Server (nó không được dùng nữa)

  4. Giá trị tham số mặc định / tham số tùy chọn cho các thủ tục được lưu trữ .NET trong SQL Server 2005

  5. Cú pháp không chính xác gần 'OFFSET' modift sql comm 2012-2008