[postgre] oczyszczanie stringa do cyfr
Mariusz Witek - 13-03-2006 11:25
[postgre] oczyszczanie stringa do cyfr mozna oczywiscie na okolo (substring,..) ale moze jest lepszy sposob typowo 2 przyklady
pole: nip char(15)
"NIP:345-12-54.666" - "zle" napisany nip chce wyrzucic wszystko !=[0-9] ->3451254666 "00=234" - zle napisany kod pocztowy ale generalnie poprawny ->00234
..... WHERE char_lenght(clear_nip) BETWEEN 9 and 10
na poczatku wpadlem na: trim(to_char(to_number( nip, '999999999999999'),'999999999999999'))
ale no tak ladnie dziala tylko co bedzie jak zaistnieje nip z "000..." na poczatku? (niby takich chyba nie ma ale do kodu pocztowego juz nie zastosuje - inaczej ..mozna to_char( ...,'0999999999999999') (uzupelni zerami z przodu) ale nie bede wiedzial, ze kod jest calkiem do bani np. dla "aa-234" lub "712hdzgfd234x54"
jak to zrobic bez procedury lub tasiemca CASE itp. ?
=?iso-8859-1?Q?Andrzej_Str=F3zynski?= - 13-03-2006 11:26
Uzytkownik "Mariusz Witek" napisal w wiadomosci news:duplnm$p9i$1@atlantis.news.tpi.pl... > > mozna oczywiscie na okolo (substring,..) ale moze jest lepszy sposob > typowo 2 przyklady > > pole: nip char(15) > > "NIP:345-12-54.666" - "zle" napisany nip chce wyrzucic wszystko !=[0-9] > ->3451254666 > "00=234" - zle napisany kod pocztowy ale generalnie poprawny > ->00234 > > .... > WHERE char_lenght(clear_nip) BETWEEN 9 and 10 > > na poczatku wpadlem na: > trim(to_char(to_number( nip, '999999999999999'),'999999999999999')) > > ale no tak ladnie dziala tylko co bedzie jak zaistnieje nip z "000..." na > poczatku? (niby takich chyba nie ma ale do kodu pocztowego juz nie > zastosuje - inaczej ..mozna to_char( ...,'0999999999999999') (uzupelni > zerami z przodu) ale nie bede wiedzial, ze kod jest calkiem do bani np. > dla > "aa-234" lub "712hdzgfd234x54" > > jak to zrobic bez procedury lub tasiemca CASE itp. ?
Tego nie wiem, ale chcialbym zwrócic uwage na fakt, ze jak z NIP-u wyrzucisz wszystkie nieistotne znaki, to mimo "czystej" formy, ten NIP moze byc bledny! Jesli chcesz miec pewnosc, ze nip jest prawidlowy to i tak musisz skorzystac z funkcji, która sprawdzi cyfre kontrolna a przy okazji usunie wszystkie zbedne (Twoim zdaniem) znaki.
Pozdrawiam A.S.
PS. Z tego co pamietam, to nie ma puli NIP-ów zaczynajacej sie od "0".
Robert Grabowski - 13-03-2006 11:26
Mariusz Witek wrote: [...]
> jak to zrobic bez procedury lub tasiemca CASE itp. ? >
test=# select regexp_replace('bbb0=0aaa', '([^0-9])', '', 'g'); regexp_replace ---------------- 00 (1 row)
Ale tylko w 8.1 ...
pozdrawiam Robert Grabowski
max - 13-03-2006 11:26
Mariusz Witek napisał(a): > mozna oczywiscie na okolo (substring,..) ale moze jest lepszy sposob > typowo 2 przyklady > > pole: nip char(15) > > "NIP:345-12-54.666" - "zle" napisany nip chce wyrzucic wszystko !=[0-9] > ->3451254666 > "00=234" - zle napisany kod pocztowy ale generalnie poprawny > ->00234 > > .... > WHERE char_lenght(clear_nip) BETWEEN 9 and 10 > > na poczatku wpadlem na: > trim(to_char(to_number( nip, '999999999999999'),'999999999999999')) > > ale no tak ladnie dziala tylko co bedzie jak zaistnieje nip z "000..." na > poczatku? (niby takich chyba nie ma ale do kodu pocztowego juz nie > zastosuje - inaczej ..mozna to_char( ...,'0999999999999999') (uzupelni > zerami z przodu) ale nie bede wiedzial, ze kod jest calkiem do bani np.dla > "aa-234" lub "712hdzgfd234x54" > > jak to zrobic bez procedury lub tasiemca CASE itp. ? Jak zrobić CO ? > > > > > A moglbym prosic o wersje "powoli i spokojnie" bo z chaosu jakos nic sie nie wyłania :)
Co chcesz zrobić ? Sprawdzić wprowadzaną wartość ? Dlaczego jesteś przeciwnikiem procedur po stronie serwera ? To daje taki KOSMICZNE możliwości :) nie do zrobienia w czystym SQL i przejrzystość SQL-a wzrasta. Juz nie wspomne o tym ze po tygodniu nadal rozumiesz o co Ci chodziło jak coś pisałeś.
AHA! I kodowanie chyba masz zle ustawione :)
Max
Mariusz Witek - 15-03-2006 10:39
Robert Grabowski wrote:
> Mariusz Witek wrote: > [...] > >> jak to zrobic bez procedury lub tasiemca CASE itp. ? >> > > test=# select regexp_replace('bbb0=0aaa', '([^0-9])', '', 'g'); > regexp_replace > ---------------- > 00 > (1 row) > > Ale tylko w 8.1 ... > > pozdrawiam > Robert Grabowski
dzieki, zamietam na dlugo p.s. a probowalem! ale zapomialem o reszcie parametrow skupiajac sie na RE i sypnelo bledem to myslalem ze tak sie nie da tego uzyc
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[PostgreSQL] - jak =?ISO-8859-2?Q?zabezpieczy=E6_interesy_tw?==?ISO-8859-2?Q?=F3rcy_systemu_=3F=3F=3F?=
postgresql - int/int
postgresql Select count(*) czy raczej Select count(ID)
[PostgreSQL] jak =?ISO-8859-2?Q?pobra=E6_warto=B6=E6_zwracan?==?ISO-8859-2?Q?=B1_przez_funkcj=EA=3F?=
[postgresql] INSERT OR UPDATE - jak =?ISO-8859-2?Q?b=EAdzie_na?==?ISO-8859-2?Q?jlepiej=3F?=
[PostgreSQL] Jak =?ISO-8859-2?Q?po=B3=B1czy=E6_funkcje_z_w?==?ISO-8859-2?Q?idokiem?=
Postgres - replikcja master-master
Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL]
Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?=
=?ISO-8859-2?Q?[psql]_Polskie_t=B3umaczenie_?= =?ISO-8859-2?Q?licencji_BSD_dla_PostgreSQL=3F?=
zanotowane.pldoc.pisz.plpdf.pisz.platanvarne633.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|