как объединить столбцы varchar (32) и binary (16) в sybase?

#sql #sybase

#sql #sybase

Вопрос:

Я хочу объединить две таблицы с помощью UUID. UUID таблицы A представлен как varchar(32). UUID таблицы B представлен как двоичный (16).

какой наилучший способ объединить varchar с двоичным столбцом?

Я пытался использовать некоторые функции sybase для этого, но я получаю разные результаты и не уверен, почему:

 select hextobigint('0x000036ca4c4c11d88b8dcd1344cdb512')
3948051912944290701
select convert(bigint,0x000036ca4c4c11d88b8dcd1344cdb512)
-2877434794219274240
  

чего я не понимаю в convert и hextobigint? Должно быть, я неправильно понимаю хотя бы одну из этих функций. спасибо за вашу помощь!

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

1. Я ничего не знаю конкретно о sybase или этих функциях, но … из соображений производительности и работоспособности ваших отношений с администраторами баз данных, выберите тип данных и придерживайтесь его. Серьезно, у вас нет двух (или более) разных типов Id s (UUID или любого другого), к которым вы ожидаете присоединиться — необходимость выполнять преобразование для каждого сравнения раздражает и снижает производительность.

2. Я согласен на 100%, это не та база данных, которую я проектировал или над которой у меня есть какой-либо контроль. Я просто пытаюсь запросить это (на самом деле это объединение по двум схемам)

3. В таком случае … можете ли вы получить шестнадцатеричное значение в качестве char представления или преобразовать текстовую строку в двоичный файл?

Ответ №1:

в конце концов получил это с помощью некоторых коллег:

 select strtobin(convert(char(32), '000036ca4c4c11d88b8dcd1344cdb512'))
  

Ответ №2:

Проблема в select convert(bigint,0x000036ca4c4c11d88b8dcd1344cdb512) .

Если вы удалите первые нули, это даст вам тот же результат:

 select hextobigint('0x000036ca4c4c11d88b8dcd1344cdb512')
  

и

 select convert(bigint,0x36ca4c4c11d88b8dcd1344cdb512)
  

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

1. странно то, что и тогда это не дает мне такого же ответа. Я обновил вопрос, чтобы не использовать bigint без знака, но все равно выдает другой результат.

2. после некоторого тестирования я нашел это.

3. спасибо, но я все еще не уверен, почему две функции выдают разный результат с заполнением 0. не похоже, что они должны.

4. @PaulSanwald что ж, это лучшее, что я могу для вас сделать