首页 > 解决方案 > 当要求返回 VARBINARY 列值时,CASE 返回汉字

问题描述

我正在尝试使用以下查询从键/值表中检索值。如果列的值是“OrderNumber”或“CustomerNumber”,那么,我想从同一个键/值表中获得另一列的值(valHash )而不是val列(我们几乎可以称之为键/值/哈希值表)。

但是当我运行查询时,当我的 CASE 满足它的第一个条件时,我会得到中文字符:

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

valHash 列数据类型为VARBINARY.

标签: sql-servertsqlkey-value

解决方案


该问题可能发生在 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 是不同的情况,你需要一个额外的列。


推荐阅读