Как преобразовать Oracle TO_NUMBER в SQL Server

#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))