当前位置: 首页 > 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.dtcms.com/a/316810.html

相关文章:

  • 永磁同步电机无速度算法--基于二自由度结构的反推观测器TSBO
  • JAVA学习笔记 自增与自减的使用-006
  • 哲学中的主体性:历史演进、理论范式与当代重构
  • 【Unity】背包系统 + 物品窗口管理系统(中)
  • RC和RR的区别
  • Pytorch实现婴儿哭声检测和识别
  • 【web自动化测试】实战
  • Coze Studio开源,企业用户多了一种选择,也需多几分考量
  • 如何通过 5 种方式将照片从 iPad 传输到电脑
  • 埋点技术进阶:如何构建高效的数据采集架构
  • 默认二级路由(React-Router 6)
  • linux-系统日志查看指令systemctl
  • 《方块34:金花之渊》
  • Linux 常用命令大全
  • C++ 拷贝赋值、swap 与 noexcept 深度解析:高效实现 operator=
  • 工业数采引擎-通信链路SOCKET
  • Python高级编程与实践:Python网络编程基础与实践
  • Linux的NFS与Autofs配置指南
  • mac安装pycharm
  • 2048小游戏
  • VUE2 学习笔记 合集
  • 如何在nuxt项目中使用axios进行网络请求?
  • 【STM32】HAL库中的实现(三):PWM(脉冲宽度调制)
  • C语言线程同步详解(互斥锁、信号量、条件变量和读写锁)
  • GPU 安装
  • 前端包管理器深度对比
  • 双模对讲机是什么意思?与模拟/数字对讲机有什么区别?
  • 使用 ECharts 实现小区住户数量统计柱状图
  • Leetcode-2080区间内查询数字的频率
  • Spring AI 系列之三十六 - Spring AI Alibaba-nl2sql