如何在SQLite3中将二进制字符串转换为十进制数?
在SQLite3中将二进制字符串转换为十进制数的方法
SQLite没有内置的二进制字符串转十进制函数,不过可以通过以下两种方式实现:
1. 纯SQL递归CTE实现(无需扩展)
适合无法添加自定义函数的场景,通过递归遍历二进制字符串的每一位计算累加值:
WITH RECURSIVE bin_convert(bin_str, decimal, position) AS ( -- 初始值:目标二进制字符串,初始十进制0,起始位置为字符串长度 SELECT '11001000', 0, length('11001000') UNION ALL -- 递归计算:每一位乘以2的对应次方,累加到十进制值,位置递减 SELECT bin_str, decimal + substr(bin_str, position, 1) * pow(2, length(bin_str) - position), position - 1 FROM bin_convert WHERE position > 0 ) -- 取最终累加的最大值即为结果 SELECT max(decimal) AS result FROM bin_convert;
执行上述语句会返回200,如果要动态传入二进制字符串,可以把固定字符串换成参数或者字段名。
2. 注册自定义函数(灵活易用)
如果使用编程语言操作SQLite,可以注册自定义函数简化查询,以Python为例:
import sqlite3 # 定义二进制转十进制的函数 def bin_to_decimal(bin_string): # 可选:添加输入校验,确保字符串仅包含0和1 if not all(c in '01' for c in bin_string): raise ValueError("Invalid binary string") return int(bin_string, 2) # 连接数据库并注册自定义函数 conn = sqlite3.connect('your_database.db') # 注册名为BIN_TO_DEC的函数,接受1个参数 conn.create_function('BIN_TO_DEC', 1, bin_to_decimal) # 直接在SQL中使用该函数 cursor = conn.cursor() cursor.execute("SELECT BIN_TO_DEC('11001000')") print(cursor.fetchone()[0]) # 输出:200 conn.close()
注册后,在SQL查询中可以像内置函数一样调用BIN_TO_DEC(),处理任意合法的二进制字符串。
内容的提问来源于stack exchange,提问作者yxw158
相关产品推荐
相关产品推荐

