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

标签 sql-server t-sql sql-server-2012

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

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

我有什么选择?

最佳答案

Varbinary 实际上可以与一些字符串操作函数配合使用,尤其是 substring。所以你可以使用例如:

select substring(yourBinary, 1, 1);

获取二进制列的第一个字节。要获得最后一点,您可以使用以下命令:

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

如果该位关闭,则返回 0;如果打开,则返回 1。

但是,如果您确实只需要检查最多最后 4-8 个字节,则可以轻松地直接在列上使用按位运算符:

select yourBinary & 1;

最后一点,这会相当慢。因此,如果您打算经常对大量数据执行此操作,那么最好只是为此创建另一个可以索引的 bit 列。如果您正在谈论最多一千行左右,或者如果您不关心速度,请开火:)

关于sql-server - 检查 SQL 中十六进制的最后一位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21992411/

相关文章:

Access 和 SQL Server 的 C# TableAdapter

SQL Server : display distinct list of orders, 并指示哪些订单包含特定产品

sql - 如何在 where 子句中连接两个或更多行与动态结果?

c# - 日期时间错误消息 : Conversion failed when converting datetime from character string

sql - 如何在 SELECT (T-SQL) 中使用变量

tsql - 查询查找所有 FK 约束及其引用的表列

SQL使用2个不同的表对数据进行排序

sql - 从 2 个表中获取结果计数

带连接的 SQL Server 更新语句

sql-server - 根据不同的事件选择最早的日期并加入其他表