sql >> Databáze >  >> RDS >> PostgreSQL

Postgres:extrahujte text až po N-tý znak v řetězci

Můžete použít přiřazování vzorů funkce v Postgresu.

Nejprve vymyslete vzor zachytit vše až do čtvrtého > charakter.

Chcete-li spustit svůj vzor, ​​měli byste vytvořit podskupinu, která zachycuje jiné než > znaků a jeden > znak:

([^>]*>)

Pak to čtyřikrát zachyťte, abyste se dostali ke čtvrté instanci >

([^>]*>){4}

Potom to budete muset zabalit do skupiny, aby shoda přinesla zpět všechny čtyři instance:

(([^>]*>){4})

a pro dobrou míru vložte symbol začátku řetězce, abyste se ujistili, že se shoduje pouze od začátku řetězce (nikoli uprostřed):

^(([^>]*>){4})

Zde je funkční příklad regex101!

Jakmile budete mít vzor, ​​který vrátí to, co chcete v prvním prvku skupiny (což můžete zjistit v online regulárním výrazu na pravém bočním panelu), musíte jej vybrat zpět v SQL.

V Postgresu je funkce podřetězec má možnost použít vzor regulárního výrazu k extrahování textu ze vstupu pomocí příkazu 'from' v podřetězci.

Chcete-li to dokončit, dejte vše dohromady!

select substring(filter_type from '^(([^>]*>){4})')
from filter_table

Prohlédněte si funkční sqlfiddle zde

Pokud chcete porovnat celý řetězec, kdykoli existují méně než čtyři instance > , použijte tento regulární výraz:

 ^(([^>]*>){4}|.*)


  1. Jak dotazovat název databáze v Oracle SQL Developer?

  2. Použití sekvenčních hodnot pro primární klíč v dotazu INSERT

  3. mysql jak převést varchar (10) na TIMESTAMP?

  4. Správa rozdílů ve formátu data mezi PHP a MySQL