Mysql
 sql >> база данни >  >> RDS >> Mysql

Има ли начин да се извлече текст, съответстващ на регулярен израз от колона в MySQL?

Това не е възможно с възможностите на mysql regex (освен ако не инсталирате някои udf, които изглежда са предназначени за това). Технически, тъй като [0-9] е ограничен набор, можете да хвърлите 10 LOCATE е в LEAST (внимавайте за &invalitdate 0) и използвайте SUBSTRING . Не е красива снимка:

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

Ако имате нужда гледам на udf. В противен случай е по-добре да извлечете полето и да го манипулирате извън MySQL.

Редактиране:ако числото се побира в цяло число , мръсното хакерство може да доведе до :

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. Запазване на стойностите на текстовото поле дори след опресняване

  2. MySQL Query получава последните N реда на група

  3. Wordpress и Drupal SSO/единично влизане

  4. четене на рамка с sqlalchemy, mysql и pandas

  5. Как мога да вмъкна реално време на събитие в база данни с помощта на php mysqli?