有人能指點我以下的解釋嗎?
如果我投binary(4)
恆定0x80000000
到int
,取所得到的值,並將其轉換爲bit
類型,則結果爲1
select cast(0x80000000 as int) --> -2147483648
select cast(-2147483648 as bit) --> 1
但是,如果我投0x80000000
至位直接鍵入結果爲0。
select cast(0x80000000 as bit) --> 0
我希望在這種情況下拿到1爲好,thinkning,可能這種表達等同於
select cast(cast(0x80000000 as binary(1)) as bit)
但事實並非如此。相反,似乎二進制常量的最高字節被取出並轉換爲位。所以,它有點像
select cast(cast(right(0x80000000, 1) as binary(1)) as bit)
我很清楚第一個binary -> int -> bit
部分。我不清楚的是第二個binary -> bit
部分。我沒能找到這種行爲在documentation,其中只有
轉換爲位提升任何非零值設爲1。
陳述說明。
好吧,似乎在'bit'類文檔中尋找答案是錯誤的地方,我應該在'binary'文檔中進行。嚴格地說,文件。您引用的語句是關於_type - > binary_ conversion,其中的問題是關於_binary - > type_。國際海事組織,假設逆向轉換具有類似的行爲(雖然它在實踐中得到證實)有一定的隱含性。儘管如此,由於doc沒有足夠明確,所以我給出了答案接受標記。感謝您指向char/binary和其他類型的不同的left/rigth截斷/填充。 –
@ i-one實際上,轉換可以通過契約來逆轉,只有當相同的規則同時適用於這兩種方式時,契約才能起作用。由於定義了type - > binary,並且定義了type - > binary - > type,所以只要使用相同的SQL Server版本,也會定義binary - > type。但是,通過在二進制文件和非字符串類型之間進行任何轉換,您已經違反了跨版本問題。 – Luaan