当前位置: 首页 > news >正文

MySQL CONV()函数

 SELECT CONV('5F',16,3); 这条SQL语句的作用是将十六进制数"5F"转换为三进制表示。

  1. CONV() 是MySQL中的进制转换函数,语法为:CONV(number, from_base, to_base)
  2. '5F' 是要转换的数字,使用十六进制表示
  3. 16 表示输入数字的进制(这里是十六进制)
  4. 3 表示要转换到的目标进制(这里是三进制)

计算过程:

  1. 首先将十六进制"5F"转换为十进制:
    • 5F₁₆ = 5×16¹ + 15×16⁰ = 80 + 15 = 95₁₀
  2. 然后将十进制95转换为三进制:
    • 95 ÷ 3 = 31 余 2
    • 31 ÷ 3 = 10 余 1
    • 10 ÷ 3 = 3 余 1
    • 3 ÷ 3 = 1 余 0
    • 1 ÷ 3 = 0 余 1
    • 从下往上读取余数:10112

所以 SELECT CONV('5F',16,3); 的结果应该是 '10112'

注意:在SQL中执行时,如果直接写 5F 而不加引号,可能会被解析为列名或引发语法错误,所以应该使用 '5F' 作为字符串传入。

MySQL CONV() 函数详解

CONV() 是 MySQL 中的一个进制转换函数,用于将数字从一种进制表示转换为另一种进制表示。

语法

CONV(number, from_base, to_base)

参数说明

  1. number:

    • 要转换的数字,可以是字符串或数值
    • 可以是正数或负数
    • 对于大于10的进制,字母不区分大小写(A-F 和 a-f 等效)
  2. from_base:

    • 输入数字的原始进制
    • 取值范围:2-36
  3. to_base:

    • 目标进制
    • 取值范围:2-36

返回值

  • 返回一个字符串,表示转换后的数字
  • 如果任一参数为 NULL,则返回 NULL
  • 如果 from_base 或 to_base 不在 2-36 范围内,返回 NULL
  • 如果 number 包含非法字符(对于给定的 from_base),返回 0

使用示例

基本转换

-- 十六进制"5F"转十进制
SELECT CONV('5F', 16, 10);  -- 结果: '95'-- 十进制95转二进制
SELECT CONV(95, 10, 2);     -- 结果: '1011111'-- 二进制"1011111"转八进制
SELECT CONV('1011111', 2, 8); -- 结果: '137'

不同进制间的转换

-- 八进制转十六进制
SELECT CONV('77', 8, 16);    -- 结果: '3F'-- 三十六进制转十进制
SELECT CONV('Z', 36, 10);    -- 结果: '35' (Z在36进制中表示35)

边界情况

-- 非法进制
SELECT CONV('10', 1, 10);    -- 结果: NULL (from_base < 2)
SELECT CONV('10', 37, 10);   -- 结果: NULL (from_base > 36)-- 非法数字字符
SELECT CONV('2', 2, 10);     -- 结果: '0' (数字2在二进制中非法)-- NULL处理
SELECT CONV(NULL, 10, 2);    -- 结果: NULL

负数处理

-- 负数的转换
SELECT CONV('-10', 10, 2);   -- 结果: '-1010'

注意事项

  1. 对于大于10的进制,字母A-Z(或a-z)表示10-35的值
  2. 转换结果总是以字符串形式返回,即使看起来像数字
  3. 如果 to_base 是负数,number 被视为有符号数,否则视为无符号数
  4. 在MySQL 8.0之前,CONV() 不支持BIGINT值,大数可能会被截断

实际应用场景

  1. 存储和显示不同进制的数据
  2. 处理硬件相关的数据(如寄存器值)
  3. 加密/解密算法实现
  4. 网络协议处理(如IP地址的不同表示形式)

性能考虑

CONV() 函数在MySQL中的实现效率较高,但对于大量数据的转换操作,建议在应用层处理,以减轻数据库负担。

http://www.lryc.cn/news/610976.html

相关文章:

  • spring webflux链路跟踪【traceId日志自动打印】
  • 移动端 WebView 调试实战 深色模式样式失效与主题切换异常排查指南
  • 前端1.0
  • Lua语言程序设计1:基础知识、数值、字符串与表
  • 针对软件定义车载网络的动态服务导向机制
  • linux_https,udp,tcp协议(更新中)
  • 实战项目3-工控软件-2.0- 自定义控件HMILabel的创建
  • 漏洞分析:90分钟安全革命
  • 赛灵思ZYNQ官方文档UG585自学翻译笔记:Quad-SPl Flash 闪存控制器
  • 信息系统项目管理中的沟通管理实战精解
  • 智慧油站误报率↓77%:陌讯多模态融合算法实战解析
  • 【Git】git提交代码报错Git: husky > pre-commit
  • 【Java面试题】注解,异常相关知识
  • 二维数点问题 1
  • Dell电脑Windows系统更新后声卡驱动无法识别插线耳机问题
  • 第13届蓝桥杯Scratch_选拔赛_初级组_真题2022年1月22日
  • leetcode-python-删除链表的倒数第 N 个结点
  • Leetcode 13 java
  • Linux网络编程:TCP初体验
  • 从递归到动态规划-解码方法Ⅱ
  • 【IDEA】IntelliJ IDEA 中文官方文档全面介绍与总结
  • 以Linux为例补充内存管理基础知识
  • 2025年服务器僵尸攻防战:从AI勒索到量子免疫,构建下一代“数字抗体”
  • Linux 常用命令大全
  • 基于vscode连接服务器实现远程开发
  • vi编辑器makefile的使用以及双向链表
  • 【C++详解】⼆叉搜索树原理剖析与模拟实现、key和key/value,内含优雅的赋值运算符重载写法
  • PHP实战代码解析与应用分享:用户管理、日志,配置管理与文件操作全解析
  • PostgreSQL——插入、更新与删除数据
  • [数组]977.有序数组的平方;209.长度最小的子数组