CASE возвращает китайские символы, когда их просят вернуть значение столбца VARBINARY - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь получить значения из таблицы ключ / значение, используя следующий запрос.В случае, если значение столбца key равно "OrderNumber" или "CustomerNumber", тогда вместо столбца val я хотел бы иметь значение другого столбца ( valHash) из той же таблицы ключ / значение (мы можем почти назвать ее таблицей ключ / значение / хэш-значение ).

Но когда я запускаю запрос, я получаю китайские символы, когда мой CASE удовлетворяет своему первому условию:

SELECT IssueId, 
    customfield,
    CASE 
        WHEN customfield IN ('OrderNumber', 'CustomerNumber') THEN valHash
        ELSE val
    END AS Value,
    valHash
FROM MyTable

Тип данных столбца valHash - VARBINARY.

1 Ответ

3 голосов
/ 15 марта 2019

Проблема может возникнуть в Val. Поскольку один столбец имеет один тип данных, вы можете выбрать это:

SELECT IssueId, 
    customfield,
    CASE 
        WHEN customfield IN ('OrderNumber', 'CustomerNumber') THEN valHash
        ELSE CAST (val AS VARBINARY (500))
    END AS Value,
    valHash
FROM MyTable

Если вы хотите, чтобы все было в виде строки, вы можете использовать это:

SELECT IssueId, 
    customfield,
    CASE 
        WHEN customfield IN ('OrderNumber', 'CustomerNumber') THEN CONVERT (NVARCHAR (50), Valhash, 2)
        ELSE val )
    END AS Value,
    valHash
FROM MyTable

Если вы настаиваете на различии между VARCHAR и VARBINARY в разных случаях, вам нужен дополнительный столбец.

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