Problem z porównywaniem stringów

0

Pewien widok w mojej tabeli zwraca string postaci

'wojewodztwo-miasto-dzielnica-ulica-kod'

każdy z tych parametrów jest opcjonalny, wyrażeń pomiędzy gwiazdkami może być wiele, kilka przykładów:

'podkarpackie----' - wszystkie wpisy z podkarpacia
'małopolskie-kraków---' - wszystkie wpisy z małopolskiego dla miasta Krakowa
'małopolskie-kraków---**podkarpackie----' - wszystkie wpisy z podkarpacia i z małopolskiego dla miasta Krakowa

W jaki sposób (wyr. regularne ?) rozpoznawać, które ze stringów pasują do wzorca, przykład:

string | wzor

'podkarpackie-krosno---' pasuje do 'podkarpackie----' bo woj. się zgadza i brak zawężenia do miasta we wzorze

'małopolskie----' pasuje do 'podkarpackie----**małopolskie-kraków---' bo jedno z wojewodztw sie zgadza

'małopolskie-nowy targ---' nie pasuje do 'podkarpackie----**małopolskie-kraków---' bo zgadza sie jedno z wojewodztw, ale nie zgadza sie miasto

'małopolskie----' nie pasuje do 'małopolskie--krowodrza--' bo w sprawdzanym stringu nie podano dzielnicy

Można manipulować zarówno sprawdzanym stringiem, jak i wzorem, tzn między '-' można wstawiać dowolne znaki (jeżeli to pomoże przy wyrażeniach regularnych).

0

Musisz tak kombinować? Nie lepiej, żeby ten widok zwracał normalne kolumny, a każde wyrażenie pomiędzy gwiazdkami przerobić na SELECT (ew. wszystkie te selecty połączyć UNION)? To, co chcesz zrobić, być może nawet da się osiągnąć, ale raczej będzie zaciemniać kod i wątpię, żeby było znacząco szybsze.

0

Hehe w sumie mogę i to zrobię ;) Chciałem podejść trochę ambitnie do tematu, ale terminy gonią.

0

Możesz też spróbować tak:

select tablica[1] wojewodztwo, tablica[2] miasto, tablica[3] dzielnica, tablica[4] ulica, tablica[5] kod from (
select string_to_array('*wojewodztwo-miasto-dzielnica-ulica-kod*','-') tablica)x
0

Dzięki.

W sumie rozwiązałem to tak ( zmieniłem konwencję zapisu ':' zamiast '-' bo jest województwo: 'kujawsko-pomorskie' i '#' zamiast '*'):

SELECT '#małopolskie:kraków:nowa huta:os teatralne:38-200#' ~ '#małopolskie:kraków:nowa huta:[^:]*:[^:]*#' -- true

SELECT '#małopolskie:kraków::białoprądnicka:#' ~ '(#podkarpackie:[^:]*:[^:]*:[^:]*:[^:]*#)|(#małopolskie:[^:]*:[^:]*:[^:]*białoprądnicka:[^:]*#)|(#mazowieckie:[^:]*warszawa:[^:]*:[^:]*:[^:]*#)' -- true

1 użytkowników online, w tym zalogowanych: 0, gości: 1