Как я могу изменить целое / нецелое значение в SQL Server 2008 - PullRequest
0 голосов
/ 05 мая 2018

У меня есть следующее целочисленное значение:

50326518

Теперь я хочу преобразовать его в обратный, но я хочу выводить как:

18653250

Я использовал reverse() функцию, но она возвращает 81562305, но я хочу вывод как 18653250

Как я могу это сделать?

Иногда значения могут быть такими F4180000

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Я бы просто сделал:

select (right(col, 2) + substring(col, 5, 2) + substring(col, 3, 2) + left(col, 2)) as byte_reversed
0 голосов
/ 05 мая 2018

Отказ от ответственности: Надеюсь, что на вашей версии 2008 работает следующее. Я не уверен насчет поддержки convert() стилей данной гекс-строки. Я нахожусь в 2014 году. Если это не сработает, я удалю или отредактирую ответ, пожалуйста, прокомментируйте соответственно.

Поскольку это шестнадцатеричная строка, и вы хотите изменить порядок байтов, вы можете convert() присвоить ей varbinary и использовать reverse() для этого. Это обратит его байт за байтом. convert() обратно к varchar в конце.

SELECT convert(varchar(max), convert(varbinary(max), reverse(convert(varbinary(max), '50326518', 2))), 2)

Печать:

18653250

Обратите внимание, по какой-то причине мне пришлось явно convert() снова вернуть значение reverse(), так как в противном случае, похоже, происходит неявное приведение к varchar. Так что это намеренно.

Возможно также рассмотрите возможность хранения данных как binary или, возможно, int. В противном случае трудно применить нормальные данные (я мог бы вставить в строку всевозможные забавные вещи, которые вообще не являются шестнадцатеричными).

...