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}|.*)