sql >> Databáze >  >> RDS >> Mysql

Existuje způsob, jak extrahovat text odpovídající regulárnímu výrazu ze sloupce v MySQL?

To není možné s funkcemi mysql regex (pokud nenainstalujete nějaké udf, které se zdá být pro to navrženo). Technicky vzato, protože [0-9] je omezená sada, můžete hodit 10 LOCATE 's v LEAST (pozor na &invalitdate 0) a použijte SUBSTRING . Není to hezký obrázek:

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

Pokud potřebujete podívejte se na udf. Jinak je lepší pole načíst a manipulovat s ním mimo MySQL.

Upravit:pokud se číslo vejde do celého čísla , špinavé hackování může mít za následek :

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


  1. Jak funguje příkaz IF na serveru SQL

  2. Jak vyhledávat obrázky podle názvu ve složce?

  3. Vytváření dynamických SQL dotazů do databáze MySQL

  4. Hašování hesel a solení – je to dobrá metoda?