Contoh PostgreSQL berikut hanya mengembalikan baris yang memiliki nilai numerik dalam kolom tertentu.
Contoh Data
Mari kita buat tabel dengan contoh data:
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 Sepuluh 5 DolarKolomnya 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 ~ '^[-+]?[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+4Kembalikan Bilangan Bulat
Jika kita hanya ingin mengembalikan bilangan bulat, kuerinya bisa jauh lebih sederhana:
SELECT c1 FROM t1 WHERE c1 ~ '^[0-9]+$';
Hasil:
c1 ---- 0 1Berisi Data Numerik
Jika kita ingin mencari baris yang berisi data numerik (walaupun baris tersebut juga berisi data non-numerik), kita dapat melakukan hal berikut:
SELECT c1 FROM t1 WHERE c1 ~ '[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 DollarsDi PostgreSQL,
~
adalah operator case-sensitive untuk mencocokkan ekspresi reguler yang diberikan. Untuk kecocokan yang tidak peka huruf besar/kecil, gunakan~*
.Anda dapat menggunakan
!~
untuk mengembalikan semua baris yang tidak cocok dengan ekspresi reguler (dan!~*
untuk kecocokan yang tidak peka huruf besar/kecil).Kelas Karakter POSIX
Postgres juga mendukung kelas karakter POSIX. Jadi kita bisa menggunakan
[:digit:]
bukannya[0-9]
jika kita mau.Contoh:
SELECT c1 FROM t1 WHERE c1 ~ '^[[:digit:]]?$';
Hasil:
c1 ---- 0 1