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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:39:05