检查SQL中十六进制的最后一位

时间:2014-02-24 15:50:09

标签: sql-server tsql sql-server-2012

我有一个类型为hex(varbinary)的SQL条目,我想为所有以十六进制值结尾的条目执行SELECT COUNT。

我正在考虑使用CONVERT将我的十六进制变为char,然后使用WHERE my_string LIKE"%1"。问题是varchar上限为8000个字符,而我的十六进制比这长。

我有哪些选择?

4 个答案:

答案 0 :(得分:1)

检查最后四位= 0001

SELECT SUM(CASE WHEN MyColumn % 16 IN (-15,1) THEN 1 END) FROM MyTable

检查最后一位= 1

SELECT SUM(CASE WHEN MyColumn % 2 IN (-1,1) THEN 1 END) FROM MyTable

如果您想知道为什么必须检查负模数,请尝试SELECT 0x80000001 % 16

答案 1 :(得分:1)

Varbinary实际上适用于一些字符串操作函数,最值得注意的是substring。所以你可以使用eg。:

select substring(yourBinary, 1, 1);

获取二进制列的第一个字节。为了得到最后一点,你可以使用它:

select substring(yourBinary, len(yourBinary), 1) & 1;

如果该位关闭,则为0,如果该位为开,则为0。

但是,如果你真的只需要检查最后4-8个字节,你可以直接在列上轻松使用按位运算符:

select yourBinary & 1;

作为最后一点,这将是相当缓慢的。因此,如果您计划经常在大量数据上执行此操作,那么只需为此创建另一个bit列可能更好,您可以将其编入索引。如果你最多谈论一千行左右,或者如果你不关心速度,那就开火吧:)

答案 2 :(得分:0)

尝试使用

WHERE LEFT(my_string,1) = 1

答案 3 :(得分:-1)

它的文本值以1结尾然后你想要Right而不是Left

WHERE RIGHT(my_string,1) = 1