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

Temukan Nilai Non-Numerik dalam Kolom di SQL Server

Mungkin ada saat-saat di mana Anda perlu memeriksa kolom untuk nilai non-numerik. Misalnya, Anda menemukan bahwa sebuah kolom adalah varchar kolom padahal seharusnya kolom numerik.

Ini mudah dilakukan di SQL Server dengan ISNUMERIC() fungsi.

Contoh Data

Misalkan kita membuat tabel dengan varchar kolom, dan masukkan data sebagai berikut:

DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
    c1 varchar(255)
);

INSERT INTO t1 (c1) VALUES 
    ('0'),
    ('1'),
    ('+1'),
    ('-1'),
    ('+1'),
    ('00.00'),
    ('73.45'),
    ('+73.45'),
    ('-73.45'),
    ('.246'),
    ('-.34e7'),
    ('12.e-3'),
    ('1.2e+4'),
    ('a'),
    ('9afc'),
    ('e7'),
    ('+e0'),
    ('Ten'),
    ('5 Dollars');

SELECT * FROM t1;

Hasil:

+-----------+
| c1        |
|-----------|
| 0         |
| 1         |
| +1        |
| -1        |
| +1        |
| 00.00     |
| 73.45     |
| +73.45    |
| -73.45    |
| .246      |
| -.34e7    |
| 12.e-3    |
| 1.2e+4    |
| a         |
| 9afc      |
| e7        |
| +e0       |
| Ten       |
| 5 Dollars |
+-----------+

Sebagian besar nilai di atas adalah numerik, meskipun dalam varchar kolom. Contoh berikut memeriksa kolom ini untuk nilai non-numerik.

ISNUMERIC() Fungsi

SELECT c1
FROM t1
WHERE ISNUMERIC(c1) <> 1;

Hasil:

+-----------+
| c1        |
|-----------|
| a         |
| 9afc      |
| e7        |
| +e0       |
| Ten       |
| 5 Dollars |
+-----------+

Di sini, saya menggunakan ISNUMERIC() fungsi bersama dengan Not Equal To (<> ) operator untuk memeriksa nilai yang bukan numerik.

Mungkin ada alasan bagus untuk sebuah kolom menjadi varchar bukannya numerik. Tetapi jika tidak, nilainya harus dikonversi ke ekuivalen numeriknya, dan kemudian tipe data kolom harus diubah menjadi tipe numerik. Ini akan membantu menjaga integritas data database.

Temukan Nilai yang Tidak Mengandung Angka Apapun

Kita dapat menggunakan kueri berikut untuk mengembalikan semua baris yang tidak berisi nilai numerik.

SELECT c1
FROM t1 
WHERE c1 NOT LIKE '%[0-9]%';

Hasil:

+------+
| c1   |
|------|
| a    |
| Ten  |
+------+

Ini adalah hasil yang berbeda dari contoh sebelumnya, karena kami hanya mencari semua nilai yang tidak mengandung data numerik apa pun. Pada contoh sebelumnya, kami mencari nilai-nilai yang bukan numerik.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server Membangun Kembali dan Mengatur Ulang Indeks

  2. Berapa kali karakter tertentu muncul dalam string

  3. Bagaimana cara melewatkan parameter nilai tabel ke prosedur tersimpan dari .net code

  4. Bergabung dengan tabel berdasarkan nilai yang dipisahkan koma

  5. Rekursi CTE untuk mendapatkan hierarki pohon