Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy istnieje sposób na wyodrębnienie tekstu pasującego do wyrażenia regularnego z kolumny w MySQL?

Nie jest to możliwe z funkcjami mysql regex (chyba że zainstalujesz niektóre udf, które wydają się być przeznaczone do tego). Technicznie, ponieważ [0-9] to ograniczony zestaw, możesz wyrzucić 10 LOCATE jest w LEAST (uważaj na &invalitdate 0) i użyj SUBSTRING . Nieładny obrazek:

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

Jeśli potrzebujesz spójrz na UDF. W przeciwnym razie lepiej jest pobrać pole i manipulować nim poza MySQL.

Edytuj:jeśli liczba mieści się w liczbie całkowitej brudne hakerstwo może spowodować:

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. Brak pamięci (przydzielono 50855936) (próbowano przydzielić 50331646 bajtów)

  2. wstawianie danych za pomocą mysql Connector w pythonie

  3. Pytasz o pole oddzielone przecinkami?

  4. Język zapytań Neo4j - Cypher

  5. Zapytanie mysql od czasu do czasu nie zwraca nic