2017-10-04 59 views
0

概述转换columnB值,如果columnA = X在SQL

我有一个内部联接链接5桌在一起这是工作飞驰声明,如果我不这样说我自己。

现在返回的值是一个十六进制,它是在一个名为然而立柱,列还包含其他值,所以我不能简单地转换整列。

每个进入列值的十六进制值的标识符为列中称为DataTypeID

问题

我如何转换只是列值如果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 

请注意,这不是剧本的准确例如它只是作为一个例子

现在我认为我会创造这个查询我上面的功能,然后添加一个,其中功能在它下面。

列和标识符的名称是准确的。

+0

没有'FROM'子句? – jarlh

+0

实际的SQL语句中有。内连接不是问题 – Oliver843

回答

0

您可以使用case表达式。您的查询有点难以解释意图,所以我将假设您有两个表(TableA和TableB),并且您希望像这样加入另一个表:TableA.Value = TableB.Value,但TableB存储它的Value列作为ints和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,然后执行连接。

希望这给你你需要的东西:-)

+0

情况_expression_,而不是_statement_。 – jarlh

+0

公平的警察。改变。 – Alan

+0

@Alan我不确定何时包括您的CASE声明。我试图在最后一次内部连接之后添加它,但如果您尝试在此转换值而不是Value上加入,则转换器无法更改正确的值字段 – Oliver843

相关问题