我有一个类型为hex(varbinary)的SQL条目,我想为所有以十六进制值结尾的条目执行SELECT COUNT。
我正在考虑使用CONVERT将我的十六进制变为char,然后使用WHERE my_string LIKE"%1"。问题是varchar上限为8000个字符,而我的十六进制比这长。
我有哪些选择?
答案 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