Jakub Owczarski
2011-04-05 10:41:36 UTC
Witam.
Mam string który powinien podlegać następującym regułom:
*tylko znaki alfanumeryczne lub minus
*minus jedynie pomiędzy cyframi.
Chciałem odszukać wszystkie nieprawidłowe stringi S w tabeli T
Wyrzeźbiłem takie zapytanie:
SELECT * FROM T WHERE NOT REGEXP_LIKE(S,'([[:alnum:]]+)|
([[:alnum:]]*[[:digit:]]+-[[:digit:]]+[[:alnum:]]*)')
W moim przekonaniu powinno zwrócić wszystkie nieprawidłowe stringi.
Nie jestem za mocny w regexp. więc może wytłumaczę co miałem na myśli,
żeby ktoś mógł mnie poprawić:
([[:alnum:]]+) - string składający się z przynajmniej jedego znaku
alfanumerycznego
ALBO
([[:alnum:]]*[[:digit:]]+-[[:digit:]]+[[:alnum:]]*) - dowolna liczba
znaków alfanumerycznych, potem conajmniej jedna cyfra, potem minus,
potem conajmniej jedna cyfra i dowolna liczba znaków alfanumerycznych.
Jednak coś poszło nie tak, bo zapytanie nie zwraca żadnych wyników,
ale kiedy zapytam np:
SELECT * FROM T WHERE S LIKE '%-' DOSTAŁEM
'ABC123-'
Które nie jest dozwolone(minus może być tylko między cyframi)
Bardzo proszę o jakąś podpowiedź co robię źle.
TIA
pzdr.
Jakub.
Mam string który powinien podlegać następującym regułom:
*tylko znaki alfanumeryczne lub minus
*minus jedynie pomiędzy cyframi.
Chciałem odszukać wszystkie nieprawidłowe stringi S w tabeli T
Wyrzeźbiłem takie zapytanie:
SELECT * FROM T WHERE NOT REGEXP_LIKE(S,'([[:alnum:]]+)|
([[:alnum:]]*[[:digit:]]+-[[:digit:]]+[[:alnum:]]*)')
W moim przekonaniu powinno zwrócić wszystkie nieprawidłowe stringi.
Nie jestem za mocny w regexp. więc może wytłumaczę co miałem na myśli,
żeby ktoś mógł mnie poprawić:
([[:alnum:]]+) - string składający się z przynajmniej jedego znaku
alfanumerycznego
ALBO
([[:alnum:]]*[[:digit:]]+-[[:digit:]]+[[:alnum:]]*) - dowolna liczba
znaków alfanumerycznych, potem conajmniej jedna cyfra, potem minus,
potem conajmniej jedna cyfra i dowolna liczba znaków alfanumerycznych.
Jednak coś poszło nie tak, bo zapytanie nie zwraca żadnych wyników,
ale kiedy zapytam np:
SELECT * FROM T WHERE S LIKE '%-' DOSTAŁEM
'ABC123-'
Które nie jest dozwolone(minus może być tylko między cyframi)
Bardzo proszę o jakąś podpowiedź co robię źle.
TIA
pzdr.
Jakub.