#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 что ж, это лучшее, что я могу для вас сделать