Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Почему не работает конкатенация ? / 6 сообщений из 6, страница 1 из 1
11.03.2018, 03:34
    #39612936
Adylov Timur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не работает конкатенация ?
Доброй ночи!
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select ascii(q)
       ,q
       ,'Буква: ' || q
  from (
  select 'A' q from dual
  union all
  select 'a' q from dual
  union all
  select 'ц' q from dual
  union all
  select 'Ц' q from dual
  union all
  select chr(246) q from dual)



Почему буква 'ц' с кодом 246 при конкатенации теряется? Как это можно решить?

Спасибо!
...
Рейтинг: 0 / 0
11.03.2018, 04:23
    #39612937
Почему не работает конкатенация ?
Adylov Timur,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
select ascii(q)
       ,q
       ,'Буква: ' || q
      , (SELECT value FROM NLS_DATABASE_PARAMETERS where parameter = 'NLS_CHARACTERSET') as NLS_CHARACTERSET
  from (
  select 'A' q from dual
  union all
  select 'a' q from dual
  union all
  select 'z' q from dual
  union all
  select 'А' q from dual
  union all
  select 'ц' q from dual
  union all
  select convert('ц', 'cl8mswin1251') q from dual
  union all
  select 'Ц' q from dual
  union all
  select chr(246) q from dual) ;



ASCII(Q) Q 'БУКВА:'||Q NLS_CHARACTERSET65 A Буква: A AL32UTF897 a Буква: a AL32UTF8122 z Буква: z AL32UTF853392 А Буква: А AL32UTF853638 ц Буква: ц AL32UTF8246 - Буква: AL32UTF853414 Ц Буква: Ц AL32UTF8246 - Буква: AL32UTF8
...
Рейтинг: 0 / 0
11.03.2018, 08:44
    #39612945
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не работает конкатенация ?
Adylov TimurКак это можно решить?Не путать байты с символами. И использовать для преобразования первых в последние (как и наоборот) правильный API с указанием кодировки последовательности байтов:
Код: plsql
1.
2.
3.
4.
5.
SQL> select utl_i18n.raw_to_char(to_char(246, 'fmxx'), 'cl8mswin1251') as byte_to_char from dual;

BYTE_TO_CHAR
-------------------------------------------------------------------------------------------------
ц


И CHR использовать только для некоторых служебных кодов вроде 10 или 13.
...
Рейтинг: 0 / 0
11.03.2018, 12:31
    #39612957
Adylov Timur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не работает конкатенация ?
Elic,

Спасибо.
А как теперь получить из этого символа обратно код 246??
...
Рейтинг: 0 / 0
11.03.2018, 12:40
    #39612958
Adylov Timur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не работает конкатенация ?
Вопрос снят, сам разобрался!

Код: plsql
1.
2.
select to_number(utl_i18n.string_to_raw(utl_i18n.raw_to_char(to_char(246, 'fmxx'), 'cl8mswin1251'),'cl8mswin1251'), 'xx') as byte_to_char 
  from dual;



Спасибо!
...
Рейтинг: 0 / 0
11.03.2018, 12:41
    #39612960
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не работает конкатенация ?
Adylov TimurА как теперь получить из этого символа обратно код 246??В какой кодировке?
Elicнаоборот
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Почему не работает конкатенация ? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]