Вопрос о преобразовании десятичной / маленькой буквы в шестнадцатеричное - PullRequest
0 голосов
/ 07 декабря 2018

Мой вопрос касается некоторых деталей, связанных с десятичным и шестнадцатеричным преобразованием в рамках SQL-запроса.

Ниже приведен пример исходного кода:

SELECT
    a.COMMUNICATION_PROTOCOL + '_' + CAST(a.ABC_ID1 AS VARCHAR) 
    + '_' + CAST(a.CODE_CNT1 AS VARCHAR) + '_' + CAST(a.ABC_ID2 AS VARCHAR)
    + '_' + CAST(a.CODE_CNT2 AS VARCHAR) + '_' 
    + CASE 
        WHEN a.TEST_1 = 'Completed' THEN 'Y'
        WHEN a.TEST_1 = 'NotCompleted' THEN 'N'
    END 
    + '_'
    + CASE 
        WHEN a.TEST_2 = 'Completed' THEN 'Y'
        WHEN a.TEST_2 = 'NotCompleted' THEN 'N'
    END
FROM
    dbo.All_Tests AS a

Код предназначен для возврата однобуквенного идентификатора протокола связи и двухсимвольного маленького целого идентификатора, а также того, поддерживаются тесты или нет.Подчеркивания вставляются между каждым.Таким образом, в качестве примера можно привести A_14_10_17_40_Y_N.

Проблема в том, что ABC_ID1 и ABC_ID2 на самом деле являются шестнадцатеричными числами, а остальные - varchar или маленькими целыми числами.Таким образом, в приведенном выше примере A_14_10_17_40_Y_N должен действительно читать A_E_10_11_40_Y_N, потому что Decimal (14) = шестнадцатеричный (0x00000E), а Decimal (17) = шестнадцатеричный (0x000011).Для выходного кода нужны только два последних символа в шестнадцатеричной последовательности.

SELECT
    ,CONVERT(VARBINARY(8), a.ABC_ID1)
FROM [...]

В приведенном выше тесте десятичное целое с малым целым числом ABC_ID1 преобразуется и выводится как 0x000E для десятичной дроби (14) и 0x0011 дляДесятичное число (17).Я не уверен, что думаю об этом правильно.Оператор IA LEN не помог бы, так как шестнадцатеричный в этом случае может быть либо одним символом (E), либо двумя символами (11), поэтому я не уверен, что лучший подход.Во-вторых, с учетом необходимого преобразования десятичного числа в шестнадцатеричное, более ли уместнее использовать CONVERT для вставки двухзначных шестнадцатеричных символов в строку символов кода или можно использовать CAST?

Буду признателен за любые мысли или указания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...