MySQL十六进制字符串转十进制字符串及日期转换方案咨询
MySQL实现十六进制日期字符串转十进制日期串的方案
核心逻辑为将6位十六进制串按2位长度拆分出年、月、日三个部分,分别对每个部分做十六进制到十进制的转换,补前导0保证单数字位为2位后拼接即可得到目标格式结果。
方法1:直接拆分转换(适用于固定6位长度的十六进制日期串)
- 核心依赖MySQL函数:
CONV()实现进制转换,LEFT()、MID()、RIGHT()拆分字符串,LPAD()补前导0保证2位长度 - 执行代码示例:
SELECT CONCAT( LPAD(CONV(LEFT(hex_date, 2), 16, 10), 2, '0'), LPAD(CONV(MID(hex_date, 3, 2), 16, 10), 2, '0'), LPAD(CONV(RIGHT(hex_date, 2), 16, 10), 2, '0') ) AS dec_date FROM your_table;
- 效果验证:以你给出的输入
150910为例,转换过程如下:- 前两位
15转十进制结果为21 - 中间两位
09转十进制结果为09 - 后两位
10转十进制结果为16 - 拼接后最终输出为
210916,完全匹配目标格式要求。
- 前两位
方法2:封装为自定义函数(适用于频繁调用的场景)
如果需要频繁执行该转换操作,可以将逻辑封装为MySQL自定义函数,简化调用步骤:
DELIMITER // CREATE FUNCTION HEX_DATE_TO_DEC(hex_date CHAR(6)) RETURNS CHAR(6) DETERMINISTIC BEGIN RETURN CONCAT( LPAD(CONV(LEFT(hex_date, 2), 16, 10), 2, '0'), LPAD(CONV(MID(hex_date, 3, 2), 16, 10), 2, '0'), LPAD(CONV(RIGHT(hex_date, 2), 16, 10), 2, '0') ); END // DELIMITER ;
- 调用方式:
SELECT HEX_DATE_TO_DEC('150910') AS dec_date;,直接返回结果210916
注意事项
- 如果表中存储的十六进制日期是二进制格式而非字符串格式,需要先调用
HEX()函数转成十六进制字符串再处理,示例:SELECT HEX_DATE_TO_DEC(HEX(hex_date_col)) FROM your_table; - 上述方案默认输入为固定6位的十六进制日期串,若实际存储的字段长度不固定,可在转换前增加长度校验逻辑避免报错。
内容的提问来源于stack exchange,提问作者Sam Peeters
相关产品推荐
相关产品推荐

