将十六进制VARCHAR转换为二进制VARCHAR

时间:2015-10-28 17:28:43

标签: sql firebird

我有一个firebird数据库表,其中包含一个由十六进制数组成的VARCHAR类型的列:

MyColumn
2020FF
731DD1
...

我想选择表的所有行,其中从十六进制转换为二进制的列包含第7位(或第8或第9或任何其他)的值1,只有一个SQL语句。

示例:

2020ff - > 001000000010000011111111 - > FALSE
731DD1 - > 011100110001110111010001 - > TRUE

伪代码:

SELECT MyColumn FROM MyTable WHERE SUBSTRING(hexToBinary(MyColumn),7,7)=1

1 个答案:

答案 0 :(得分:2)

如果varchar列中的数字足够小以至于它适合64位整数,则可以将其转换为bigint,然后使用bin_and()内置函数来检查位的状态。即检查第7位:

SELECT MyColumn FROM myTable WHERE bin_and(cast('0x' || MyColumn as bigint), 64) <> 0;