czy kolumna varchar zawiera określone znaki

0

Używam Firebird 2.5
Mam kolumnę typu VARCHAR(100)
Chcę wyszukać wpisy które zawierają na dowolnej pozycji znak spoza zakresu a-z, A-Z, 0-9
Próbuję użyć do tego funkcji SIMILAR TO ale mi nie wychodzi.
Podpowiecie?

Podaję przykład tego na czym operuję:

 
 with lista as (
  select 'ASD09AAXC' AS NUMER FROM RDB$DATABASE
  UNION
  select '23423421123123123' FROM RDB$DATABASE
  UNION
  select 'ASDWAAAXC' FROM RDB$DATABASE
  UNION
  select 'ASD-09AAXC' FROM RDB$DATABASE
  UNION
  select '!A1321239AAXC' FROM RDB$DATABASE
  UNION
  select 'ASD09AAXC' FROM RDB$DATABASE
  UNION
  select 'ASDrr$AX3' FROM RDB$DATABASE
  UNION
  select '111SD09AAXC' FROM RDB$DATABASE
)

select * from lista
WHERE
--NUMER similar to '%[[:DIGIT:]]' 
--NUMER similar to '%[^A-Z,a-z,0-9]' 
--NUMER  CONTAINING '[0-9]' 
NUMER similar to '%[^[:ALNUM:]]%'
0

Dobra teraz powinno być ok

NUMER NOT SIMILAR TO '[[:ALNUM:]]*'
0

nie jest dobrze bo NUMER NOT SIMILAR TO ':ALNUM:*' zwróciło mi także wiersze prawidłowe

0

Sam pomysł jest ok.
Jeżeli zrobisz ręcznie

 where "ASD09AAXC" not similar to '[[:ALNUM:]]*' 

będzie ok, ale już

 with ... where number not similar to '[[:ALNUM:]]*' 

nie działa. Biedny RDB nie wie jaki jest typ pola w przy definicji with ... i wali varchar (255).
Podsumowując:

with ...
select * from lista
WHERE
trim (NUMER) not similar to '[[:ALNUM:]]*'

powinno zadziałać bez problemu

0

Tak, rzeczywiście teraz działa dobrze.
Żeby dodać ten trim to bym nie wpadł.
Wielkie dzięki.

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