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

Apakah ada cara untuk mengekstrak teks yang cocok dengan ekspresi reguler dari kolom di MySQL?

Ini tidak mungkin dengan kemampuan regex mysql (kecuali menginstal beberapa udf yang tampaknya dirancang untuk itu). Secara teknis, karena [0-9] adalah set terbatas, Anda dapat melempar 10 LOCATE ada di LEAST (hati-hati &batalkan tanggal 0), dan gunakan SUBSTRING . Bukan gambar yang cantik:

SET @var ='asjdasd35433';
SELECT SUBSTRING(@var,1,
  LEAST(
    IF(LOCATE(0,@var)=0,LENGTH(@var),LOCATE(0,@var)),
    IF(LOCATE(1,@var)=0,LENGTH(@var),LOCATE(1,@var)),
    IF(LOCATE(2,@var)=0,LENGTH(@var),LOCATE(2,@var)),
    IF(LOCATE(3,@var)=0,LENGTH(@var),LOCATE(3,@var)),
    IF(LOCATE(4,@var)=0,LENGTH(@var),LOCATE(4,@var)),
    IF(LOCATE(5,@var)=0,LENGTH(@var),LOCATE(5,@var)),
    IF(LOCATE(6,@var)=0,LENGTH(@var),LOCATE(6,@var)),
    IF(LOCATE(7,@var)=0,LENGTH(@var),LOCATE(7,@var)),
    IF(LOCATE(8,@var)=0,LENGTH(@var),LOCATE(8,@var)),
    IF(LOCATE(9,@var)=0,LENGTH(@var),LOCATE(9,@var))
   ) -1 ) as 'result';
+---------+
| result  |
+---------+
| asjdasd | 
+---------+

Jika Anda membutuhkan itu melihat udf. Jika tidak, Anda lebih baik mengambil bidang dan memanipulasinya di luar MySQL.

Edit:jika angka cocok dengan bilangan bulat , peretasan kotor dapat mengakibatkan :

SET @var ='asjdasd35433';
SELECT SUBSTRING(@var,1,LENGTH(@var)-LENGTH(CAST(REVERSE(@var) as UNSIGNED)));
+---------+
| result  |
+---------+
| asjdasd |
+---------+


  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:Jadikan warna dari tabel warna dapat dicari

  2. Menggunakan Inner Join untuk menentukan interval antara record tertentu dan event terkait dalam sebuah tabel

  3. Geocoder Google Maps untuk menemukan tempat terdekat dari database MySQL

  4. SQL Subquery mengembalikan lebih dari 1 baris

  5. Dapatkan tag file mp4