Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Jenis kompleks string bidang - angka - string

Solusi ini lebih dapat diandalkan daripada jawaban yang dipilih. Jawaban ini mungkin tidak memberikan jawaban yang diharapkan jika ada lebih dari 1 angka seperti 'EPA WELL 5 7' di stasiun. Solusi ini mengisi angka dengan '0 sehingga perbandingan akan mempertimbangkan semua angka 8 digit.

DECLARE  @Table1 table([station] varchar(26))

INSERT INTO @Table1
    ([station])
VALUES
    ('ANTIL WELL 2'),
    ('ANTIL WELL 1'),
    ('BASELINE & CALIFORNIA WELL'),
    ('EPA WELL 7'),
    ('EPA WELL 6'),
    ('EPA WELL 108'),
    ('EPA WELL 109'),
    ('EPA WELL 110'),
    ('EPA WELL 111'),
    ('EPA WELL 112'),
    ('EPA WELL 108S'),
    ('EPA WELL 111108')
;

SELECT station
FROM @table1
ORDER BY 
CASE WHEN station not like '%[0-9]%' THEN station ELSE
   STUFF(station, PATINDEX('%[0-9]%',station), 0, replicate('0', 
   PATINDEX('%[0-9]%',station) - len(station) + PATINDEX('%[0-9]%',reverse(station)) + 6))
END

*Jawaban GoatCD tidak akan memberikan urutan yang benar dalam data pengujian saya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Generasi waktu acak yang berbeda dalam interval tetap

  2. Gunakan XEvent Profiler untuk menangkap kueri di SQL Server

  3. Memilih COUNT(*) dengan DISTINCT

  4. Cara meringkas bidang waktu di SQL Server

  5. Cara melampirkan database SQL Server dari baris perintah