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

19.数学函数

一、基础运算类

函数

功能说明

示例(假设 num= -3.2

ABS(num)

计算数值的绝对值,无论原数正负,结果非负

ABS(-3.2)

3.2

MOD(numerator, denominator)

计算余数(同 numerator % denominator

逻辑,结果符号与分子一致 )

MOD(7, 3)

1

MOD(-7, 3)

-1

二、进制转换类

函数

功能说明

示例(以十进制数 10

为例)

BIN(decimal_number)

十进制数转二进制字符串

BIN(10)

'1010'

HEX(DecimalNumber)

十进制数转十六进制字符串

HEX(10)

'A'

CONV(number2, from_base, to_base)

通用进制转换(支持不同进制间转换,from_base

是原数进制,to_base

是目标进制 )

十进制 10

转八进制:CONV(10, 10, 8)

'12'

三、取整与小数处理类

函数

功能说明

示例(以 num=3.7

num=3.2

为例 )

CEILING(number2)

向上取整,返回不小于原数的最小整数(同 CEIL

别名)

CEILING(3.2)

4

CEILING(-3.7)

-3

FLOOR(number2)

向下取整,返回不大于原数的最大整数

FLOOR(3.7)

3

FLOOR(-3.2)

-4

FORMAT(number, decimal_places)

按指定小数位数格式化数值(会四舍五入,结果是字符串类型 )

FORMAT(3.1415, 2)

'3.14'

四、统计比较类

函数

功能说明

示例(参数为 1, 2, 3

时 )

LEAST(number, number2 [...])

多个数值中取最小值(参数需同类型或可隐式转换,遇 NULL

结果可能受影响 )

LEAST(1, 2, 3)

1

RAND([seed])

生成随机浮点数,范围 0 ≤ v ≤ 1.0

;带 seed

时可固定随机序列(同种子生成相同值 )

RAND()

→ 随机值(如 0.12345

);RAND(1)

→ 固定序列值


 

这些函数覆盖了数值计算、进制转换、取整、统计等常见数学场景,用的时候记得结合实际需求选~ 比如处理金额用 FORMAT 格式化小数,做随机数据用 RAND

五、示例

(1)创建测试表

-- 创建测试表
CREATE TABLE numbers_test (id INT PRIMARY KEY AUTO_INCREMENT,int_positive INT,int_negative INT,decimal_positive DECIMAL(10,2),decimal_negative DECIMAL(10,2),fractional_number FLOAT,large_number BIGINT,zero_value INT,null_value INT
);-- 插入测试数据
INSERT INTO numbers_test (int_positive, int_negative, decimal_positive, decimal_negative, fractional_number, large_number, zero_value, null_value)
VALUES(10, -5, 3.14, -2.718, 0.123456789, 9223372036854775807, 0, NULL),(20, -10, 1234.56, -987.65, 0.987654321, 123456789012345, 0, NULL),(1, -1, 0.01, -0.01, 0.5, 10000000000, 0, NULL),(0, 0, 0.00, 0.00, 0, 0, 0, NULL);

(2)求绝对值

-- 1. ABS() 测试
SELECT int_negative, ABS(int_negative) AS absolute_value
FROM numbers_test;

(3)取余

-- 2. MOD() 测试
SELECT int_positive, MOD(int_positive, 3) AS mod_result
FROM numbers_test;

(4)转二进制和十六进制

-- 3. BIN() 和 HEX() 测试
SELECT int_positive, BIN(int_positive) AS `binary`,  -- 使用反引号转义保留关键字HEX(int_positive) AS hexadecimal
FROM numbers_test;

(5)十进制转八进制

-- 4. CONV() 测试 (十进制转八进制)
SELECT int_positive, CONV(int_positive, 10, 8) AS octal
FROM numbers_test;

(6)向上向下取整

-- 5. CEILING() 和 FLOOR() 测试
SELECT fractional_number, CEILING(fractional_number) AS ceiling, FLOOR(fractional_number) AS floor
FROM numbers_test;

(7)小数点格式化

-- 6. FORMAT() 测试
SELECT decimal_positive, FORMAT(decimal_positive, 1) AS formatted
FROM numbers_test;

(8)取最小值

-- 7. LEAST() 测试
SELECT int_positive, int_negative, LEAST(int_positive, int_negative) AS smallest
FROM numbers_test;

(9)生成随机数

-- 8. RAND() 测试 (生成随机数)
SELECT id, RAND() AS random_value,RAND(id) AS seeded_random -- 使用id作为种子生成可重复的随机值
FROM numbers_test;

再次执行生成随机数的sql语句:根据种子生成的随机数无论再生成多少次都是固定的。

说明:

在 MySQL 的 RAND() 函数里,种子(seed) 是用来控制随机数生成逻辑的关键参数,作用主要体现在 让随机数生成可预测、可重复,核心逻辑和效果可以这样理解:

1. 基础原理:随机数的“伪随机”本质

计算机里的“随机数”大多是 伪随机数,靠数学算法(比如线性同余法)生成。给 RAND(seed) 传固定种子,算法就会基于这个初始值,按固定规则生成后续随机数序列 。

2. 种子的核心作用:让随机结果“可重复”

  • 不传种子(RAND():每次调用会用系统时钟等动态值当种子,生成的随机数完全随机、无规律,每次执行 SQL 结果都不同。
    比如:
SELECT RAND(), RAND() FROM numbers_test;
-- 每次执行结果都变,像 0.1234、0.5678 或 0.9876、0.4321 这类无规律组合
  • 传固定种子(RAND(seed):只要种子不变,同一套数据、同一条 SQL 生成的随机数序列就固定。
    用你测试表的 id 当种子举例:
-- 假设 id 是 1、2、3
SELECT id, RAND(id) AS seeded_random FROM numbers_test;

第一次执行,id=1RAND(1) 生成一个固定值(比如 0.4054 ),id=2RAND(2) 也对应固定值(比如 0.9233 );下次再执行这条 SQL,id 对应行的 seeded_random 结果和之前 完全一样

3. 实用场景:需要“可控随机”的地方

  • 测试环境:想让测试数据里的随机数固定(比如模拟抽奖、分配场景),用种子保证每次跑测试逻辑一致。
  • 数据脱敏/ anonymization:给用户数据加随机扰动,但又要同一用户每次处理结果一致(用用户 ID 当种子),方便追溯。
  • 生成可复现的“随机”序列:比如游戏里固定种子生成地图、关卡随机元素,保证玩家重试时场景一致。

4. 注意细节

  • 种子是“初始值”:种子相同,生成的随机数序列固定,但不同行(id 不同)只要种子固定,各自的随机数也是按规则生成的固定值(不是所有行都同一个数)。
  • 整数种子RAND(seed)seed 要求是整数,传非整数会自动转成整数(比如传 1.2 会当 1 处理 )。

简单说,种子就是给随机数算法一个“初始密码” ,知道密码(种子),就能复现相同的随机数序列;不知道(或用动态种子),结果就完全随机 。用 id 当种子,能让同一条数据每次生成的随机数固定,方便测试和一些需要“可控随机”的业务逻辑~

相关文章:

  • eps8266作为AP服务端 esp32c3作为STA客户端
  • LVS +Keepalived 高可用群集
  • 稀疏大模型架构与训练算法研究
  • 【排坑指南】MySQL初始化后,Nacos与微服务无法连接??
  • 什么是gateway以及在微服务中是如何使用的
  • openEuler安装BenchmarkSQL
  • 使用YOLO模型进行线程安全推理
  • 如何高效实现公司文件管理
  • HarmonyOS5 分布式测试:断网情况支付场景异常恢复验证
  • 筑牢安全防线:电子文件元数据驱动的 AI 知识库可控管理方案
  • Redis从库读取主库创建且已过期的key
  • 断言(Assertion)中常用的正则表达式
  • 《汇编语言:基于X86处理器》第2章 x86处理器架构
  • Neo4j 入门到精通(Cypher语言详解)
  • 第 1 章,[标签 Win32] :第一个 WIn32 程序,头文件
  • pthread_once函数使用场景与原理
  • 设计模式精讲 Day 5:原型模式(Prototype Pattern)
  • NAT 与代理服务器 -- NAT,NAPT,正向代理,反向代理
  • 强化学习之 DQN、Double DQN、PPO
  • 黑马python(八)
  • 30岁做网站编辑/企业推广宣传文案
  • 四川网站建设外包/大数据营销
  • 快云助手网站建设视频/在线推广企业网站的方法有哪些
  • 零基础可以用阿里云做网站吗/合肥seo优化公司
  • 什么是网站建设/百度seo怎么把关键词优化上去
  • crack wordpress/太仓seo网站优化软件