You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何将单个十六进制字符转为4位二进制字符串?

单个十六进制字符转4位二进制字符串的优雅实现

针对你需要将单个十六进制字符(支持0-9、a-f/A-F)转换为固定4位二进制字符串的需求,除了CASE语句,这里提供几种更简洁易维护的实现方式:

1. 利用数据库内置函数(分方言)

不同SQL数据库都有内置的类型转换或进制转换函数,直接组合就能实现需求:

PostgreSQL

通过十六进制转整数,再转4位bit类型,最后补前导零确保固定4位:

SELECT LPAD(CAST(CAST('x' || 'f' AS INTEGER) AS BIT(4))::TEXT, 4, '0');
-- 替换'f'为你的十六进制字符变量或字段

MySQL

使用CONV函数完成进制转换,再用LPAD补零:

SELECT LPAD(CONV('f', 16, 2), 4, '0');
-- CONV(目标值, 原进制, 目标进制),LPAD确保结果为4位

SQL Server

通过十六进制转整数,再转换为二进制字符串并补零:

SELECT RIGHT('0000' + CAST(CONVERT(BIT(4), CONVERT(INT, '0x' + 'f', 16)) AS VARCHAR(4)), 4);

2. 查找表方案(适合高频转换场景)

如果需要频繁执行这类转换,创建一个映射表是更高效且易维护的选择:

-- 创建映射表
CREATE TABLE hex_bin_map (
    hex_char CHAR(1) PRIMARY KEY,
    bin_str CHAR(4) NOT NULL
);

-- 插入所有十六进制字符的映射关系
INSERT INTO hex_bin_map VALUES
('0','0000'),('1','0001'),('2','0010'),('3','0011'),
('4','0100'),('5','0101'),('6','0110'),('7','0111'),
('8','1000'),('9','1001'),('a','1010'),('b','1011'),
('c','1100'),('d','1101'),('e','1110'),('f','1111'),
('A','1010'),('B','1011'),('C','1100'),('D','1101'),
('E','1110'),('F','1111');

-- 查询转换结果
SELECT bin_str FROM hex_bin_map WHERE hex_char = 'f';

这种方式比CASE语句更易扩展(比如后续需要调整格式时,只需要修改表数据),且批量转换时性能更优。

内容的提问来源于stack exchange,提问作者ConanTheGerbil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 08:13:13