【问题标题】:Convert Hexadecimal VARCHAR to binary VARCHAR将十六进制 VARCHAR 转换为二进制 VARCHAR
【发布时间】:2015-10-29 23:01:19
【问题描述】:

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

我的专栏
2020FF
731DD1
...

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

例子:

2020ff -> 001000000010000011111111 -> 错误
731DD1 -> 011100110001110111010001 -> 是的

伪代码:

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

【问题讨论】:

  • Firebird 中没有标准功能可以让您执行此操作,您需要编写自己的 UDF;或查找执行此操作的现有 UDF。

标签: sql firebird


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 2018-04-07
    • 2015-02-09
    • 2012-06-26
    • 2016-08-28
    相关资源
    最近更新 更多