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

mengembalikan angka dari tengah string dengan format tidak beraturan

Ini adalah tugas non-sepele di MySQL, tidak ada fungsi bawaan untuk mengembalikan kecocokan ekspresi reguler. Tetapi karena Anda mencari tepat 13 digit, Anda dapat melakukan sesuatu seperti ini (jelas, perluas ini ke jumlah posisi yang perlu Anda periksa...

-- setup test
CREATE TABLE t (foo VARCHAR(30));
INSERT INTO t VALUES 
('1938420985390asdfih')
,('1234812934810dflkasd')
,('asdfasldkjfaasdfjasd')
,('asd;flkjaklsdf')
,('adfsdf1234073927357sdapjfas')
,('1/4sdikhsd')


SELECT CASE
       WHEN SUBSTR(foo,1,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,1,13)
       WHEN SUBSTR(foo,2,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,2,13)
       WHEN SUBSTR(foo,3,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,3,13)
       WHEN SUBSTR(foo,4,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,4,13)
       WHEN SUBSTR(foo,5,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,5,13)
       WHEN SUBSTR(foo,6,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,6,13)
       WHEN SUBSTR(foo,7,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,7,13)
       WHEN SUBSTR(foo,8,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,8,13)
       WHEN SUBSTR(foo,9,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,9,13)
       END AS digits
  FROM t

-------------------
1938420985390
1234812934810
(NULL)
(NULL)
1234073927357
(NULL) 

Tidak, itu tidak cantik. Tetapi Anda harus dapat memperluas ini untuk secara efektif "memindai" string dengan panjang yang masuk akal.

CATATAN:Ekspresi reguler memeriksa apakah seluruh 13 karakter substring terdiri dari tepat 13 karakter, masing-masing karakter adalah angka desimal (0 hingga 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. CURTIME() Contoh – MySQL

  2. cara mempertahankan bidang pesanan tampilan di php

  3. mengembalikan rata-rata jumlah catatan setelah grup dengan pernyataan

  4. MySQL - Mengambil nilai terendah

  5. Bagaimana cara mendeteksi jika pengguna telah keluar, di php?