Sortowanie adresu

0

Mam problem z sortowaniem adresów w Firebird.
Mam adres oddzielnie w poszczególnych polach: AMiasto, AUlica, ANrDomu, ANrLokalu
Z miastem i ulicą nie ma problemu: ORDER BY UPPER(AMiasto), UPPER(AUlica),
Problem jest z numerami domów i lokali. Samo ORDER BY nie zadziała bo aby umożliwić wpisanie numeru np 1A są to pola VARCHAR. Sortuje kolejno po znakach tak że np 11 jest przed 4.
W Oraclu rozwiązałem to tak:
TO_NUMBER(REGEXP_SUBSTR(ANrDomu, ''^[0-9]+'')), REGEXP_SUBSTR(ANrDomu, ''\D+''), TO_NUMBER(REGEXP_SUBSTR(ANrLokalu, ''^[0-9]+''))
Niestety Firebird jest uboższy od Oracla i nie ma REGEXP_SUBSTR czym można by to zastąpić w moim przypadku?
Bo TO_NUMBER myślę zastąpić przez CAST(...... as integer)
Muszę jednak najpierw wywalić litery a później cyfry z pola ANrDomu i nie wiem jak to zrobić.
Czy ktoś może coś mi pomóc?

0

Może trzeba dodać do tabeli pole ANrDomuInt. Wtedy na każdej bazie będzie łatwo.

0
jarekczek napisał(a):

Może trzeba dodać do tabeli pole ANrDomuInt. Wtedy na każdej bazie będzie łatwo.

To by było zbyt łatwo. Nie mogę tak zrobić. Użytkownik musi mieć możliwość wpisania np 1A. Jeśli bym zostawił stare pole to i tak bym musiał kopiować do nowego pola część liczbową.I miałbym problem co zrobić z wcześniej wpisanymi numerami musiał bym jakoś uzupełnić nowe pole - aplikacja na bazie już pracuje.

0

A tak nie wystarczy:

ORDER BY
    LPAD(ANrLokalu,10,'0')
0
Panczo napisał(a):

A tak nie wystarczy:

ORDER BY
    LPAD(ANrLokalu,10,'0')

LPAD załatwi sprawę w większości przypadków. Będzie dobrze jeśli wszystkie numeru będą się składały tylko z cyfr. Wtedy faktycznie 4 będzie przed 11. Ok. jednak jak nam się pojawi 4A to będzie:
4
11
4A
a chciałbym:
4
4A
11
dlatego pytam jak wywalić wszystkie litery z numeru aby zostawić tylko cyfry. Posortować po cyfrach. W następnej kolejności wywalić cyfry i posortować po literach.

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