Temat: [Oracle] Funkcja zamieniająca polskie znaki na ich...

Witam,
Czy istnieje funkcja, która zmieni polskie znaki diakrytyczne na ich odpowiedniki?

np. string 'Źródło' na 'Zrodlo'?

konto usunięte

Temat: [Oracle] Funkcja zamieniająca polskie znaki na ich...

Michał K.:
Witam,
Czy istnieje funkcja, która zmieni polskie znaki diakrytyczne na ich odpowiedniki?

np. string 'Źródło' na 'Zrodlo'?

Ja takiej nie znam. Możesz użyć translate albo replace.

konto usunięte

Temat: [Oracle] Funkcja zamieniająca polskie znaki na ich...

A z czystej ciekawości zapytam: po co?

Temat: [Oracle] Funkcja zamieniająca polskie znaki na ich...

Muszę z imion i nazwisk tworzyć loginy, które ie mogą mieć polskich znaków.

Temat: [Oracle] Funkcja zamieniająca polskie znaki na ich...

Tak na szybko:
declare
t1 varchar2(2000);
FUNCTION bez_pl(t in out varchar2) RETURN varchar2 is
BEGIN
t:= REPLACE(t, 'ą', 'a');
t:= REPLACE(t, 'Ą', 'A');
t:= REPLACE(t, 'ć', 'c');
t:= REPLACE(t, 'Ć', 'C');
t:= REPLACE(t, 'ę', 'e');
t:= REPLACE(t, 'Ę', 'E');
t:= REPLACE(t, 'ł', 'l');
t:= REPLACE(t, 'Ł', 'L');
t:= REPLACE(t, 'ń', 'n');
t:= REPLACE(t, 'Ń', 'N');
t:= REPLACE(t, 'ó', 'o');
t:= REPLACE(t, 'Ó', 'O');
t:= REPLACE(t, 'ś', 's');
t:= REPLACE(t, 'Ś', 'S');
t:= REPLACE(t, 'ż', 'z');
t:= REPLACE(t, 'Ż', 'Z');
t:= REPLACE(t, 'ź', 'z');
t:= REPLACE(t, 'Ź', 'Z');
return t;
END;
begin
t1 := 'ęółśążźćńĘÓŁŚĄŻŹĆŃ';
t1 := bez_pl(t1);
dbms_output.put_line(t1);
end;

OUTPUT: eolsazzcnEOLSAZZCNTen post został edytowany przez Autora dnia 18.09.13 o godzinie 11:45

konto usunięte

Temat: [Oracle] Funkcja zamieniająca polskie znaki na ich...

No tak, teoretycznie ładnie... o ile masz tylko nazwiska z polskimi znaczkami :)

Temat: [Oracle] Funkcja zamieniająca polskie znaki na ich...

@Wojciech Trzciałkowski :
Translate będzie krótszy w zapisie:

translate(pole,'ĄąĆćĘꣳŃńÓ󌜏źŻż','AaCcEeLlNnOoSsZzZz')


@Szymon:
Faktycznie niepolskie nazwiska będą problemem...
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: [Oracle] Funkcja zamieniająca polskie znaki na ich...

Może ktoś sprawdzić? Nie mam akurat instnacji pod ręką :-)


select 'ĄąĆćĘꣳŃńÓ󌜏źŻż' pl, utl_raw.cast_to_varchar2((nlssort('ĄąĆćĘꣳŃńÓ󌜏źŻż', 'nls_sort=binary_ai'))) stripped from dual;

Temat: [Oracle] Funkcja zamieniająca polskie znaki na ich...

Sprawdziłem, daje wynik
aacceełlnnoosszzzz


Sprawdziłem również dla tego ciągu 'Ü' zamienił na 'u'

Co powoduje ze wielkie i małe litery kończą jako małe?

Czym jest 'pl' w zapytaniu?
Sugeruje, że ma coś wspólnego z polską stroną kodową, w takim razie czemu poradził sobie z np. 'Ü'?
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: [Oracle] Funkcja zamieniająca polskie znaki na ich...

pl to nazwa kolumny.

nlssort zamienia tekst na ciąg bajtów, przy czym daje możliwość określenia co zrobić z akcentami i czy uwzględnić specyfikę języka w którym tekst jest zapisany.

_AI - accent-insensitive powoduje ignorowanie akcentów w tekście

Trochę dziwi mnie, że zamienił 'Ł' na 'ł'.

http://docs.oracle.com/cd/B28359_01/olap.111/b28126/dm...

Jeśli chodzi o wielkość znaków, to nie wiem skąd się wzięły małe literki. Zmieniłt to albo nlssort albo convert_to_varchar2.

-- Kawałek nie testowany

select 'Ąą' original,
nlssort('Ąą', 'nls_sort=binary_ai') nlsBytes,
utl_raw.cast_to_varchar2(nlssort('Ą', 'nls_sort=binary_ai'))||utl_raw.cast_to_varchar2(nlssort('ą', 'nls_sort=binary_ai')) cast_test
from dual;

Temat: [Oracle] Funkcja zamieniająca polskie znaki na ich...

Małe litery to mały problem, ale jest coś innego.
Funkcje które użyłeś dodają do stringa jakieś 'białe znaki'
Wyglądają jak spacje ale nimi nie są, na wyjściu widzę np taki string:

'a a ' kopiuje to do schowka wklejam i mam tylko pierwsze 'a'.

Sprawdziłem funkcją dump() co jest zwracane"

Typ=1 Len=4: 97,0,97,0

97 to litera 'a'
0 to null

czyli [a][null][a][null]

http://www.techonthenet.com/ascii/chart.php

Czy ten null musi być zwracany?

Nie umiem się go pozbyć:

Replace(pole, null, '')
ani
Replace(pole, chr(0), '') nie daje rady

to również nie dało rady (wszystkie białe znaki):

Translate(pole, chr(0) ||chr(1) ||chr(2) ||chr(3) ||chr(4) ||chr(5) ||chr(6) ||chr(7) ||chr(8) ||chr(9) ||chr(10) ||chr(11) ||chr(12) ||chr(13) ||chr(14) ||chr(15) ||chr(16) ||chr(17) ||chr(18) ||chr(19) ||chr(20) ||chr(21) ||chr(22) ||chr(23) ||chr(24) ||chr(25) ||chr(26) ||chr(27) ||chr(28) ||chr(29) ||chr(30) ||chr(31) ||chr(32),'')

Temat: [Oracle] Funkcja zamieniająca polskie znaki na ich...

P.S. tak to Ł -> ł też jest dziwne...
Tomasz Kania

Tomasz Kania DBA, SoftSystem Sp.
z o.o.

Temat: [Oracle] Funkcja zamieniająca polskie znaki na ich...

A może "convert()" ?
Tylko jako source_charset musisz podać nls_characterset Twojej bazy, bo inaczej wyjdą "krzaki",
coś w stylu:


select convert('ĄąĆćĘꣳŃńÓ󌜏źŻż','US7ASCII',(select property_value from database_properties where property_name='NLS_CHARACTERSET')) from dual;

Następna dyskusja:

[Oracle] Funkcja group




Wyślij zaproszenie do