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

Cara tercepat untuk memeriksa apakah suatu karakter adalah angka?

Saya akan sangat terkejut jika Anda dapat mendeteksi perbedaan antara WHERE col LIKE '[0-9]' dan metode lain yang Anda temukan. Tapi saya setuju dengan Denis, simpan itu dalam suatu fungsi sehingga Anda menggunakan pemeriksaan yang sama secara konsisten di seluruh kode Anda (atau setidaknya, jika Anda menghindari UDF karena pemindaian besar dll., letakkan penanda di kode Anda yang akan membuatnya mudah untuk diubah dalam skala luas nanti).

Yang mengatakan, Anda pasti akan melihat lebih banyak kinerja yang dicapai hanya dengan menggunakan UDF skalar daripada metode apa yang Anda gunakan untuk mengurai di dalam fungsi. Anda benar-benar harus membandingkan kinerja UDF vs. melakukan itu sebaris menggunakan CASE . misalnya

SELECT Postal = CONVERT(INT, CASE WHEN SUBSTRING(postal,2,1) LIKE '[0-9]' 
       THEN SUBSTRING(postal, 2,1) END)
FROM ...

Ini akan menghasilkan NULL jika karakternya bukan numerik.

Jika Anda hanya berurusan dengan memeriksa variabel lokal, sebenarnya tidak masalah metode penguraian apa yang Anda gunakan, dan Anda lebih baik memfokuskan upaya pengoptimalan Anda di tempat lain.

EDIT menambahkan saran untuk mendemonstrasikan JOIN ayat. Ini berpotensi menyebabkan pemindaian yang kurang konstan tetapi jauh lebih mudah dibaca (panggilan substring jauh lebih sedikit, dll):

;WITH v AS 
(
    SELECT /* other columns, */ patientPostal, 
      ss = SUBSTRING(v.patientPostal,2,1),
      FROM [whatever table is aliased v in current query]
)
SELECT /* column list */
FROM [whatever table is aliased z in current query]
INNER JOIN v ON z.postal = CONVERT(INT, CASE 
    WHEN v.ss = '0' THEN ss
    WHEN v.ss LIKE '[1-9]' THEN LEFT(v.patientPostal, 3)
END);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Temukan Kolom Partisi untuk Tabel yang Dipartisi di SQL Server (T-SQL)

  2. Kunci asing ke kunci komposit

  3. SSIS 2008 - Dapatkan Tanggal Saat Ini dalam Variabel

  4. Masalah izin di SSMS:Izin SELECT ditolak pada objek 'extended_properties', database 'mssqlsystem_resource', ... Kesalahan 229)

  5. Tidak dapat masuk ke prosedur tersimpan di SQL Server 2008 jarak jauh