|
|
|
Преобразование binary to varchar
|
|||
|---|---|---|---|
|
#18+
Собственно сабж. (Sybase ASA 9) Есть поле типа binary в нем хранится, например, 0x0323f3 необходимо получить '0x0323f3'. Прямое преобразование естественно не работает, т.к. Sybase пытается преобразовать этот тип как набор кодов символов и выдает свои потуги в преобразовании 0x0323f3 в кодировку cp1251. Если кто сталкивался с подобной проблемой, подскажите где почитать или как решить данную задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2008, 08:19 |
|
||
|
Преобразование binary to varchar
|
|||
|---|---|---|---|
|
#18+
Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2008, 17:53 |
|
||
|
Преобразование binary to varchar
|
|||
|---|---|---|---|
|
#18+
White Owl select inttohex(1234556); Эту функцию я смотрел, она мне не подходит в силу того, что мои данные не преобразются к типу int - 0xdf5738d1227e1088c4ed4545a589916007ca6af3e9a2c22dab0d124a8cedbd20ed896f21 Или, возможно, я что-то не так делаю ? Собственно уши растут из необходимости при слиянии нескольких баз организовать общий список пользователей. На форуме достаточно много обсуждалось различных способов решения (базы находятся в других городах, нужен максимально простой способ), однако я решил пойти по пути выгрузки полей user_name & password из таблицы sysuserperm в файл с помощью функции unload, а затем, загрузив эти данные в промежуточную табличку с помощью Load, вызвать свою процедурку, которая выполнит GRANT CONNECT TO .... . Но для этого необходимо пропарсить исходный password в вид - \xDF\x57\x38\xD1 и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2008, 08:09 |
|
||
|
Преобразование binary to varchar
|
|||
|---|---|---|---|
|
#18+
_Kostik_однако я решил пойти по пути выгрузки полей user_name & password из таблицы sysuserperm в файл с помощью функции unload, а затем, загрузив эти данные в промежуточную табличку с помощью Load, вызвать свою процедурку, которая выполнит GRANT CONNECT TO .... . Но для этого необходимо пропарсить исходный password в вид - \xDF\x57\x38\xD1 и т.д. Ну так после выгрузки в текстовый файл, у тебя в файле будет строка '0x1235890abcd.....'. Пусть теперь та промежуточная табличка куда ты заливаешь эти данные принимает это поле как char(76) который потом просто строковыми функциями будешь превращать 0x1234 в "\x12\x34" Ты уже при выгрузке получишь нормальную шестнадцатиричную строку. Дальше уже всего-лишь вопрос форматирования. Кстати, мне сейчас лениво проверять, но мне почему-то кажется, что там даже такой минимальной конвертации не нужно будет. Просто формируешь команду типа: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2008, 17:42 |
|
||
|
Преобразование binary to varchar
|
|||
|---|---|---|---|
|
#18+
White Owl Ну так после выгрузки в текстовый файл, у тебя в файле будет строка '0x1235890abcd.....'. Увы будет - 0x1235890abcd..... без кавычек при запросе: Код: plaintext Код: plaintext White Owl Кстати, мне сейчас лениво проверять, но мне почему-то кажется, что там даже такой минимальной конвертации не нужно будет. Просто формируешь команду типа: Код: plaintext Из ISQL такую команду задать конечно можно, кстати, проверил, если напрямую задать 0x12345678abcd.... без форматирования - работать не будет (запрос выполнится, но под паролем уже не зайдешь). Но из процедуры эту строку сформировать не получается, т.к. снова вылазит аброкадабра преобразования, что так: Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 05:29 |
|
||
|
Преобразование binary to varchar
|
|||
|---|---|---|---|
|
#18+
_Kostik_На текущий момент просто написали внешний скрипт на sh, который выставляет кавычки. Поиски решения непосредственно на sql успехом пока не увенчались.Внешний скрипт это вполне легальное решение задачи. В принципе, любой внешний файл можно загружать через xp_read_file и самостоятельно его разбирать. А не через load который действительно попытается сконвертировать поле опознаное как binary в текст при загрузке в varchar поле. Еще можно сделать то самое cast(password as varchar) и полученную строку символов прогнать через цикл типа такого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 18:34 |
|
||
|
Преобразование binary to varchar
|
|||
|---|---|---|---|
|
#18+
Благодарю, действительно цикл вполне работоспособен ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2008, 05:48 |
|
||
|
Преобразование binary to varchar
|
|||
|---|---|---|---|
|
#18+
White Owl Код: plaintext 1. Небольшой вопрос по этой строке: Умеет ли SA (10, 11) оптимизировать подобные вызовы ? Что будет в данном конкретном случае: SA будет на каждом этапе цикла считать длину строку дергая функцию length или он может вместо length(pas) подставить значение (константу) и использовать для цикла ее ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2008, 20:41 |
|
||
|
Преобразование binary to varchar
|
|||
|---|---|---|---|
|
#18+
Не слишком умным должен быть оптимизатор? А если я внутри цикла манипулирую длинной строки pas? - вставляю \ удаляю символы, заменяю подстроку на подстроку и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2008, 06:30 |
|
||
|
Преобразование binary to varchar
|
|||
|---|---|---|---|
|
#18+
Выражение: Код: plaintext 1. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2008, 07:41 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=35656955&tid=2011285]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 367ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...