2017-10-04 91 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