PostgreSQL: Zamiana znaków
Adam W. - 22-02-2006 21:48
PostgreSQL: Zamiana znaków
Witam! Mam taki problem. Potrzebuję w wyniku select podmienić znaki. Otrzymuję jaki¶ tam ci±g i chcę w nim podmienić wszystkie polskie znaki na ich odpowiedniki bez ogonków. Np w stringu 'się' chciałbym mieć 'sie'. Znalazłem funkcję replace(string, co_zmieniamy, na_co) ale niestety działa tylko na pojedyńczych znakach. Macie może jakie¶ pomysły? Z góry dziękuję
Pozdrawiam Adam W.
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
max - 22-02-2006 21:48
Adam W. napisał(a): > Witam! > Mam taki problem. > Potrzebuję w wyniku select podmienić znaki. > Otrzymuję jaki¶ tam ci±g i chcę w nim podmienić wszystkie polskie znaki na ich > odpowiedniki bez ogonków. > Np w stringu 'się' chciałbym mieć 'sie'. > Znalazłem funkcję replace(string, co_zmieniamy, na_co) > ale niestety działa tylko na pojedyńczych znakach. > Macie może jakie¶ pomysły? > Z góry dziękuję > > Pozdrawiam > Adam W. > Dziwne bo w moim postgresql replace działa na tekstach np.:
template1=# select replace( 'abcdefabcdef', 'cd', 'XX');
replace -------------- abXXefabXXef (1 row)
adamczyk05@poczta.onet.pl - 22-02-2006 21:48
> > Witam! > > Mam taki problem. > > Potrzebuję w wyniku select podmienić znaki. > > Otrzymuję jaki¶ tam ci±g i chcę w nim podmienić wszystkie polskie znaki na ich > > odpowiedniki bez ogonków. > > Np w stringu 'się' chciałbym mieć 'sie'. > > Znalazłem funkcję replace(string, co_zmieniamy, na_co) > > ale niestety działa tylko na pojedyńczych znakach. > > Macie może jakie¶ pomysły? > > Z góry dziękuję > > > > Pozdrawiam > > Adam W. > > > Dziwne bo w moim postgresql replace działa na tekstach > np.: > > template1=# select replace( 'abcdefabcdef', 'cd', 'XX'); > > * *replace > -------------- > *abXXefabXXef > (1 row) Zaproponowany przez Ciebie zapis powoduje, że w stringu szukany jest ci±g 'cd' i zamieniany na ci±g 'XX'. Ja natomiast poszukuję rozwi±zania innego. Chodzi mi aby zamienić 'Tre¶ć' na 'Tresc' z małym zastrzeżeniem. Nie wiem jaki string mam do zamiany.
Dziękuję za pomoc.
Pozdrawiam Adam
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
max - 22-02-2006 21:48
> Dziwne bo w moim postgresql replace działa na tekstach > np.: > > template1=# select replace( 'abcdefabcdef', 'cd', 'XX'); > > replace > -------------- > abXXefabXXef > (1 row)
CREATE OR REPLACE FUNCTION bez_pl(text) RETURNS text AS $BODY$ DECLARE v_str text; BEGIN v_str = replace($1,'ˇ','A'); v_str = replace(v_str,'Ę','E'); v_str = replace(v_str,'Ć','C'); v_str = replace(v_str,'Ż','Z'); v_str = replace(v_str,'¬','Z'); v_str = replace(v_str,'Ó','O'); v_str = replace(v_str,'Ł','L'); ... ... return v_str; end $BODY$ LANGUAGE 'plpgsql' VOLATILE;
Ale to jest taka bardzo łopatologiczna metoda łańcuch jest kilkakrotnie czytany
Mariusz
Noel - 22-02-2006 21:48
Użytkownik max napisał:
>> Dziwne bo w moim postgresql replace działa na tekstach >> np.: >> >> template1=# select replace( 'abcdefabcdef', 'cd', 'XX'); >> >> replace >> -------------- >> abXXefabXXef >> (1 row) > > > CREATE OR REPLACE FUNCTION bez_pl(text) > RETURNS text AS > $BODY$ > DECLARE > v_str text; > BEGIN > v_str = replace($1,'ˇ','A'); > v_str = replace(v_str,'Ę','E'); > v_str = replace(v_str,'Ć','C'); > v_str = replace(v_str,'Ż','Z'); > v_str = replace(v_str,'¬','Z'); > v_str = replace(v_str,'Ó','O'); > v_str = replace(v_str,'Ł','L'); > ... > ... > return v_str; > end > $BODY$ > LANGUAGE 'plpgsql' VOLATILE; > > Ale to jest taka bardzo łopatologiczna metoda łańcuch jest kilkakrotnie > czytany >
Może jest odpowiednik translate?
np:
translate('się','abcdefghij...z±ćę...ĽˇĆ..¬','abcd efghij...zace...zA..Z');
-- Tomek "Noel" B.
Adam W. - 22-02-2006 21:48
> > Dziwne bo w moim postgresql replace działa na tekstach > > np.: > > > > template1=# select replace( 'abcdefabcdef', 'cd', 'XX'); > > > > * *replace > > -------------- > > *abXXefabXXef > > (1 row) > > CREATE OR REPLACE FUNCTION bez_pl(text) > * RETURNS text AS > $BODY$ > DECLARE > * v_str text; > BEGIN > * v_str = replace($1,'ˇ','A'); > * v_str = replace(v_str,'Ę','E'); > * v_str = replace(v_str,'Ć','C'); > * v_str = replace(v_str,'Ż','Z'); > * v_str = replace(v_str,'¬','Z'); > * v_str = replace(v_str,'Ó','O'); > * v_str = replace(v_str,'Ł','L'); > *... > * ... > * return v_str; > end > $BODY$ > * LANGUAGE 'plpgsql' VOLATILE; > > Ale to jest taka bardzo łopatologiczna metoda łańcuch jest kilkakrotnie > czytany > > Mariusz Serdeczne dzięki za pomoc.
Pozdrawiam Adam W.
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Adam Buraczewski - 28-02-2006 13:12
Adam W. <adamczyk05@poczta.onet.pl> wrote: > Otrzymuję jaki¶ tam ci±g i chcę w nim podmienić wszystkie polskie znaki na ich > odpowiedniki bez ogonków. > Np w stringu 'się' chciałbym mieć 'sie'. > Znalazłem funkcję replace(string, co_zmieniamy, na_co) > ale niestety działa tylko na pojedyńczych znakach. > Macie może jakie¶ pomysły?
To ja mam jeszcze inny pomysł: spróbuj funkcji to_ascii():
select to_ascii('±ćęłń󶼿 ˇĆĘŁŃÓ¦¬Ż'); to_ascii --------------------- acelnoszz ACELNOSZZ (1 row)
Jest we wszystkich nowszych wersjach Postgresa.
Pozdrawiam!
-- Adam Buraczewski <adamb (at) nor (dot) pl> * Linux user #165585 GCS/TW d- s-:+>+:- a C+++(++++) UL++++$ P++ L++++ E++ W+ N++ o? K w-- O M- V- PS+ !PE Y PGP+ t+ 5 X+ R tv- b+ DI D G++ e+++>++++ h r+>++ y?
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] kilka =?ISO-8859-2?Q?rekord=F3w_subquery_jako_?==?ISO-8859-2?Q?string?=
[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?=
zanotowane.pldoc.pisz.plpdf.pisz.pllatwa-kasiora.pev.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 |
|