概述
我有一个内连接语句,将5个表连接在一起,如果我自己这么说的话,它会非常有用。
现在返回的值之一是Hex,它位于名为 Value 的列中,但 Value 列还包含其他值,所以我不能简单地转换整栏。
列值中的每个十六进制值在名为 DataTypeID 的列中都有 18 的标识符。
问题
如果DataTypeID = 18,如何在列值中转换只十六进制条目。
我知道这需要一个函数:
SELECT CONVERT(INT, CONVERT(VARBINARY
但我不确定如何写它以及放置它的位置,是在我的内部连接声明之前还是之后?
SELECT Data.Value AS Value, Entry_Data.DataTypeID AS DataTypeID
From Database.Entry
INNER JOIN Database.Data on Entry_Data.DataTypeID=DataTypeID
INNER Join Database.Data on Data.Value=Value
请注意,这不是脚本的准确示例,仅用于示例目的
现在我假设我会在此查询之上创建我的函数,然后在其下面添加 where 函数。
列和标识符的名称是准确的。
答案 0 :(得分:0)
您可以使用case
表达式。
您的查询有点难以解释意图,因此我假设您有两个表(TableA和TableB),并且您希望将这两个表连接到另一个:TableA.Value = TableB.Value
,但是TableB将其Value列存储为int和hex(int)的混合,其中hex(insts)由TableB.VDataTypeID = 18
的值标识,而任何其他DataTypeID表示TableB.Value是常规int。
如果是这种情况,请执行以下操作:
SELECT
...
FROM
TableA
INNER JOIN TableB ON TableA.Value
= CASE WHEN TableB.DataTypeID = 18 THEN Convert(...
ELSE TableB.DataTypeID
END
因此,您有效地将CASE
表达式用作要加入的就地函数。
它读取,如果TableB.DataTypeID不是18,则直接将TableA连接到TableB,如果它是18,则先转换TableB.Value然后再进行连接。
希望这能满足您的需求: - )