Saya memiliki tabel SQL dengan kolom tanggal (VARCHAR), tanggal disajikan dalam tabel di kolom tanggal dengan dua cara:

1.:

05.01.2020

Dan 2.:

2020-01-05

Saya meminta untuk menemukan/mengembalikan semua baris yang ditampilkan dengan cara pertama: 05.01.2020

Saya mencoba menggunakan klausa 'LIKE' dengan cara ini:

SELECT * FROM     `myTable`
WHERE             `date_column`
LIKE              '%(\d{1,2}).(\d{1,2}).(\d{4})%';

Server SQL melakukan kueri ini tanpa kesalahan, tetapi dengan nol baris yang dikembalikan. Saya mungkin akan memiliki kesalahan di suatu tempat.

0
Petr Fořt Fru-Fru 5 Januari 2020, 23:12

2 jawaban

Jawaban Terbaik

Sederhana:

LIKE '__.__.____'

Akan dilakukan untuk kasus ini.

3
forpas 5 Januari 2020, 20:16

Jika Anda benar-benar ingin memvalidasi angka, ekspresi reguler Anda adalah rute yang lebih baik. Namun, Anda perlu menggunakan operator ekspresi reguler:

WHERE date_column REGEXP '^\d{1,2}[.]\d{1,2}[.]\d{4}$'

Perhatikan bahwa . adalah karakter pengganti dalam ekspresi reguler. Dan berdasarkan pertanyaan Anda, Anda ingin mencocokkan seluruh string -- bukan hanya menemukan pola di dalam string.

Jika Anda menggunakan like, Anda sebaiknya menggunakan:

where date_column like '%.%.%'

Ini memeriksa bahwa pemisah adalah titik, yang cukup untuk membedakan kedua format.

2
Gordon Linoff 5 Januari 2020, 21:31