Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kembalikan Hanya Nilai Numerik di MySQL

Kueri MySQL berikut hanya mengembalikan baris yang memiliki nilai numerik dalam kolom tertentu.

Contoh Data

Misalkan kita membuat tabel seperti ini:

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

INSERT INTO t1 (c1) VALUES 
    ('0'),
    ('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;

Tabel sekarang telah dibuat dan berisi data berikut:

+-----------+
| c1        |
+-----------+
| 0         |
| 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 |
+-----------+

Kolomnya adalah varchar(255) kolom, jadi bukan numerik. Itu dapat (dan memang) berisi angka tetapi ini disimpan sebagai data karakter. Itu juga dapat berisi teks arbitrer (yang memang benar).

Kembalikan Semua Nilai Numerik

Kita dapat menggunakan kueri berikut untuk mengembalikan semua nilai numerik dari tabel di atas:

SELECT c1
FROM t1 
WHERE c1 REGEXP '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';

Hasil:

+--------+
| c1     |
+--------+
| 0      |
| 1      |
| +1     |
| -1     |
| 00.00  |
| 73.45  |
| +73.45 |
| -73.45 |
| .246   |
| -.34e7 |
| 1.2e+4 |
| e7     |
| +e0    |
+--------+

Di sini, kami menggunakan REGEXP berfungsi untuk mencocokkan hanya nilai yang cocok dengan pola yang kita tentukan.

Kembalikan Bilangan Bulat

Jika kita hanya ingin mengembalikan bilangan bulat, polanya bisa jauh lebih sederhana:

SELECT c1
FROM t1 
WHERE c1 REGEXP '^[0-9]+$';

Hasil:

+------+
| c1   |
+------+
| 0    |
| 1    |
+------+

Berisi Data Numerik

Jika kita ingin mencari baris yang hanya berisi data numerik (meskipun juga berisi data non-numerik), kita dapat melakukan hal berikut:

SELECT c1 
FROM t1 
WHERE c1 REGEXP '[0-9]+';

Hasil:

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

Kelas Karakter POSIX

MySQL mendukung kelas karakter POSIX, yang berarti kita dapat menggunakan [:digit:] bukannya [0-9] dalam ekspresi reguler kami.

Contoh:

SELECT c1
FROM t1 
WHERE c1 REGEXP '^[[:digit:]]?$';

Yang setara dengan berikut ini:

SELECT c1
FROM t1 
WHERE c1 REGEXP '^[0-9]?$';

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa perbedaan antara SQL dan MySQL?

  2. Cara mengimpor dan mengekspor database MySQL

  3. Apakah MySQL melanggar standar dengan mengizinkan memilih kolom yang bukan bagian dari grup berdasarkan klausa?

  4. Mengikat parameter untuk klausa WHERE IN dengan PDO

  5. Apa perbedaan antara MySQL dan SQL?