Преобразование шестнадцатеричного значения в символ в DB2

#sql #db2

#sql #db2

Вопрос:

В связи с репликацией данных из SQL Server в DB2 у меня следующий вопрос:

У DB2 меня есть таблица, содержащая (для простоты) два столбца: COL1 и COL2 .

COL1 определяется как CHAR(20) . COL2 определяется как CHAR(10) .

COL1 реплицируется из SQL путем преобразования строки в шестнадцатеричное значение, например "abcdefghij" , в "6162636465666768696A" или "1111111111" в "31313131313131313131" с помощью следующего SQL-запроса:

 CONVERT(char(20), cast(@InputString as binary) 2)
  

где @InputString бы это было "abedefghij" .

Другими словами, COL1 содержит шестнадцатеричное значение, но в виде строки (извините, если формулировка неверна).

Мне нужно преобразовать шестнадцатеричное значение обратно в строку и поместить это значение COL2 в.

Какой SQL-запрос должен быть включен DB2 для выполнения преобразования? Я знаю, как это сделать SQL Server , но не на DB2 .

Примечание: Причина, по которой шестнадцатеричное значение не фиксируется заранее "0x" , заключается в том, что в инструкции используется стиль 2 CONVERT .

Комментарии:

1. Вроде как решил мою проблему. Оказывается, что столбец, определенный как ДВОИЧНЫЙ на SQL Server, будет правильно реплицирован в столбец, определенный как VARCHAR для BIT в DB2. Все равно хотелось бы узнать ответ на вышесказанное, если у кого-нибудь он должен быть.

Ответ №1:

 select hex('A') from sysibm.sysdummy1; 
  

возвращает 41.
и

 select x'41' from sysibm.sysdummy1;
  

дает вам ‘A’. Таким образом, вы можете поместить это в for цикл и перебирать каждую пару шестнадцатеричных символов, чтобы получить исходную строку. Или вы можете написать свою собственную функцию unhex.

Взято из dbforums.com /db2/1627076-display-hex-columns.html (редактирование ноябрь 2020: ссылка на исходный источник теперь является спам-сайтом)

Ответ №2:

DB2 имеет встроенное кодирование / декодирование.

Для вопроса OPs используйте….

 select CAST(ColumnName as char(20) CCSID 37) as ColumnName from TableName where SomeConditionExists
  

http://www-01.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/com.ibm.db2z10.doc.intro/src/tpc/db2z_introcodepage.dita

Комментарии:

1. Спасибо!! Жаль, что я не могу дать вам больше одного голоса: D

2. SQL0622N Предложение «CCSID <целое число>» недопустимо для этой базы данных. SQLSTATE=56031

Ответ №3:

Это одна из наиболее близких тем к предмету моей проблемы:

Я потерял 2 дня, чтобы выяснить, как перенести XML-файлы, хранящиеся в DB2 BLOB-поле, с помощью SQL Developer. (Да, миграция и выполнение запросов от SQL Developer — мы переносим данные в Oracle из DB2, поэтому мы использовали этот инструмент)!

Как отобразить XML-файл / строку, хранящуюся в BLOB?

Давайте начнем с того, в чем заключалась проблема:

  1. Данные в большом двоичном объекте представляли собой XML-файл.
  2. При выборе в запросе, получил:

    введите описание изображения здесь

  3. При приведении, например:

select CAST(BLOBCOLUMN as VARCHAR(1000)) from TABLE where id = 100;

вывод был в шестнадцатеричном формате:

введите описание изображения здесь

  1. Ничего не сработало… Даже не решение из ссылок в этом разделе. !НИЧЕГО!

По ошибке найдено решение:

  1. СОЗДАНИЕ ФУНКЦИИ в DB2:

    CREATE FUNCTION unhex(in VARCHAR(32000) FOR BIT DATA)
    RETURNS VARCHAR(32000)
    LANGUAGE SQL
    CONTAINS SQL
    DETERMINISTIC NO EXTERNAL ACTION
    BEGIN ATOMIC
    RETURN in;
    END

  2. Запустите SELECT:

    select UNHEX( CAST(BLOBCOLUMN as VARCHAR(32000) FOR BIT DATA)) from TABLE where id = 100;

  3. Результат:

введите описание изображения здесь

Ответ №4:

Я использую это для преобразования БИТОВЫХ ДАННЫХ в символы:

 cast (colvalue as varchar(2000) ccsid ebcdic for sbcs data)