#sql-server #oracle
#sql-сервер #Oracle
Вопрос:
Я переношу некоторые SQL-скрипты из Oracle на SQL Server и столкнулся с проблемой при попытке преобразовать Oracles TO_NUMBER
в код T-SQL. Некоторое время просматривал веб-страницы, но так и не нашел ответа, но все они говорят, что нужно преобразовать hex с помощью CAST
или CONVERT
с VARBINARY
помощью.
Пример проблемы, с которой я сталкиваюсь, приведен ниже.
В Oracle:
select
to_number( '000000000000000000001111', 'XXXXXXXXXXXXXXXXXXXXXXXX' )
from
dual
возвращает 4369
При попытке использовать T-SQL CONVERT
:
select
CONVERT(VARBINARY, '000000000000000000001111')
возвращает 0x30303030303030303030303030303030303030303030303031313131
и
select
CONVERT(INT, CONVERT(VARBINARY, '000000000000000000001111'))
возвращает 825307441
Буду признателен за любую помощь.
Спасибо
Ответ №1:
TSQL имеет двоичные литералы, поэтому вы можете написать его следующим образом:
select CONVERT(INT, 0x000000000000000000001111)
выводит
4369
Если вы начинаете с шестнадцатеричной строки, вы можете использовать convert с двоичным стилем 1 или 2, так что
select convert(int, convert(varbinary(1024),'000000000000000000001111', 2))
выводит
4369
Комментарии:
1. Опередите меня, так как мне нужно было ответить на телефонный звонок!
2. Блестяще, спасибо, что сработало.
Ответ №2:
Это должно выполнить работу.
select convert(bigint, convert(Varbinary(MAX), '000000000000000000001111',2))