Я пытаюсь преобразовать varbinary в varchar, но это вызывает появление некоторых нежелательных символов, как показано ниже. Может кто-нибудь дайте мне знать, есть ли лучший способ сделать это.
Я пытаюсь выполнить следующий запрос
SELECT
BLOB_CONTENTS,
CONVERT(VARCHAR(MAX), [BLOB_CONTENTS]),
CONVERT(NVARCHAR(MAX), [BLOB_CONTENTS])
FROM
[hie_temp].[V500].[CE_BLOB]
WHERE
EVENT_ID = '760365'
Код varbinary выглядит так:
0x05028A64F2A9488645100E84053281148A4324080A0412A1209E4C2791CB2208EC7A3F2090C7
Я получаю что-то вроде этого
Šdò©H†E„2ŠC$ ¡ žL'‘Ë"ìz? Ç…ˆÔl8Œ£hÐr-ŒDBy¨O)B„IÑH\CdòA"¤Ò£Ä²)L‚V “…‚‘<¦H©@‰$â!$‡$“é¸ù°A&ˆ Ö˜M–”DŠ‘EåBI6Ý á2ˆœ (•H¥(á„Nœ“H$ÂIR9")•ñ‘’¸€„A)J¶«|xb1ÊÅã‘Ä€ŒLéE£ XÄr
Выберите BLOB_CONTENTS, CONVERT (varchar (max), [BLOB_CONTENTS]), CONVERT (nvarchar (max), [BLOB_CONTENTS]) FROM [hie_temp]. [V500]. [CE_BLOB], где EVENT_ID = '760365'
У меня есть шестнадцатеричный код, начинающийся с 0x05028 от Oracle
Пометьте свою СУБД
как это сделать ?
Какое содержание у вашего блоба? Вы уверены, что его можно преобразовать в текст?
Это формат RTF
Если у вас действительно был исходный файл RTF, находящийся в проводнике, и вы открыли этот файл в блокноте ... вот что вы бы увидели - куча странных символов. Ожидаете ли вы, что ваш varchar будет полужирным и подчеркнутым? Это не так. До сих пор вы объяснили проблему, которая состоит из Oracle, SQL Server, BLOB-объектов, файлов RTF, varchars. Это очень запутано. Вам нужно определить четкую проблему. "вызвать некоторые нежелательные символы" - это нет определение проблемы.


RTF - это не простой текст, вам нужно написать процедуру / функцию для преобразования RTF в текст, см. здесь.
В качестве альтернативы вы можете сделать это на своем языке программирования, см. эта почта для примера на C#.
Большое спасибо за этот пост. Моя проблема здесь в том, что есть blob-объект, который уже создан в Oracle для файлов RTF. Итак, я извлек эти капли на сервер SQl, используя SSIS как varbinary. Теперь я хочу декодировать эту переменную в текст. Обратите внимание: varbinary начинается с 0x05 и не является четным числом. Пожалуйста, поправьте меня, если я что-то пропустил.
вы можете попробовать первую ссылку (проект кода) выше, вам может потребоваться сначала преобразовать свой varbinary в nvarchar (max), а затем передать его функции RTF2Text.
что такое код проекта один? извините, я новичок в этом. ты можешь быть более ясным?
Я создал функцию и передал ей свой varbinary. но я получаю результат, как показано ниже. ȅ 撊 ꧲ 虈 ၅ 萎 ㈅ᒁ 䎊 ࠤЊ ꄒ 鸠
вы пробовали преобразовать свой varbinary в nvarchar (max), а затем передать его в RTF2Text?
Я пробовал это Выбрать BLOB_CONTENTS, [dbo]. [RTF2Text] (convert (nvarchar (max), BLOB_CONTENTS)) FROM [hie_temp]. [V500]. [CE_BLOB] где EVENT_ID = '760365' поправьте меня, если я ошибаюсь
да, это то, что я имел в виду ... не уверен! вы можете проверить, работает ли этот метод, создав образец test.rtf и вставив его в свою базу данных SQL ... возможно, с вашим varbinary произошло преобразование формата при извлечении его из Oracle и копировании в sql.
образец файла действительно работал. Но капля, которую я извлек из оракула, не работает. Они дают мне каких-то странных персонажей
Ах, вы сузили проблему ;-)
Есть ли способ проверить, в чем проблема с форматом, и как ее решить?
Я не уверен, что там происходит, но это совершенно новый вопрос (вы можете задать новый вопрос и объяснить шаги, которые вы выполнили)
поделитесь запросом, который вы пробовали.