Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Gibt es eine Möglichkeit, Text, der einem regulären Ausdruck entspricht, aus einer Spalte in MySQL zu extrahieren?

Dies ist mit MySQL-Regex-Funktionen nicht möglich (es sei denn, Sie installieren einige UDFs, die dafür ausgelegt zu sein scheinen). Technisch gesehen, da [0-9] eine begrenzte Menge ist, könnten Sie 10 LOCATE werfen ist in LEAST (achten Sie auf &invalitdate 0) und verwenden Sie SUBSTRING . Kein schönes Bild:

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

Wenn Sie brauchen sieh dir udf an. Andernfalls ist es besser, das Feld abzurufen und es außerhalb von MySQL zu manipulieren.

Bearbeiten:wenn die Zahl in eine Ganzzahl passt , Dirty Hackery könnte zu :

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