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

Výběr části pole s regulárním výrazem

Tato odpověď je zastaralá. MySql má lepší podporu regulárních výrazů.

Ne, je smutné říci, že MySQL nemá způsob, jak aplikovat regulární výraz na obsah sloupce v klauzuli SELECT, pouze klauzuli WHERE.

Ale můžete k tomu použít běžné (neregulární) funkce pro manipulaci s řetězci. Pokud se sloupec obsahující řetězec parametru oddělený ampersandem jmenuje url , můžete získat identifikační číslo pomocí tohoto jemného řetězcového výrazu, který najde vaše identifikační číslo.

  CAST(RIGHT(url, LENGTH(url) - 3 - LOCATE('&id=', url)) AS SIGNED INTEGER)

Pokud tedy chcete seznam id hodnoty z url sloupce table1 , můžete použít tento SELECT dotaz.

SELECT CAST(RIGHT(url, LENGTH(url) - 3 - 
                       LOCATE('&id=', url)) AS SIGNED INTEGER) AS id
  FROM table1
 WHERE url REGEXP '&id=[0-9]+'

Jak můžete vidět, toto používá funkci vyhledávání regulárních výrazů k nalezení příslušných řádků.

Na tom není nic rychlého. Shoda regulárních výrazů nemůže zneužít index MySQL. Pokud máte možnost načíst tabulku s předem extrahovaným sloupcem id, bude se vám mnohem lépe hledat, až bude váš stůl velký.



  1. mysql vyberte, chcete-li vrátit mezery pro všechny kromě prvního řádku opakujícího se sloupce

  2. MySQL převádí stupně, minuty, sekundy na stupně v desítkové soustavě

  3. Jaký COLLATE bych měl nastavit, abych používal všechny možné jazyky?

  4. porovnejte dvě pole čísel a odstraňte duplikáty v php