痛饮狂歌

SQLite 中的数学函数

2025-10-14
5 分钟阅读
入门教程

SQLite 中的数学函数

#SQLite #Math Function

SQLite 中的数学 (Math) 函数是标量函数的一个子集,内置于 SQLite 合并源文件(SQLite amalgamation source file)中。但只有在编译合并源文件时指定了 -DSQLITE_ENABLE_MATH_FUNCTIONS 编译选项,这些函数才会生效。

数学函数的参数可以是整数、浮点数,也可以是看似整数或实数的字符串或二进制大对象(blob)。若任一参数为 NULL,或为无法直接转换为数字的字符串 / 二进制大对象,函数将返回 NULL。对于定义域错误,这些函数同样会返回 NULL,例如对负数求平方根,或对大于 1.0、小于 -1.0 的值计算反余弦。

数学函数返回的值通常是近似值。以 pi() 函数为例,其返回值为 3.141592653589793115997963468544185161590576171875,该值比真实圆周率约小 1.22465e-16,但这是 IEEE754 双精度浮点数所能提供的最接近真实值的近似值。

SQLite 提供了如下 30 个数学函数:

acos(X)

  • 返回 X 的反余弦值,结果以弧度为单位。

acosh(X)

  • 返回 X 的反双曲余弦值。

asin(X)

  • 返回 X 的反正弦值,结果以弧度为单位。

asinh(X)

  • 返回 X 的反双曲正弦值。

atan(X)

  • 返回 X 的反正切值,结果以弧度为单位。

atan2(Y, X)

  • 返回 Y / X 的反正切值,结果以弧度为单位。函数会根据 X 和 Y 的正负符号,将结果置于正确的象限中。

atanh(X)

  • 返回 X 的反双曲正切值。

ceil(X)、ceiling(X)

  • 返回大于或等于 X 的最小整数,即通常所说的 “向上取整”。例如输入 3.2 会返回 4(远离零点),输入 -3.9 会返回 -3(向零点靠拢),输入 5.0 则直接返回 5。

cos(X)

  • 返回 X 的余弦值,其中 X 以弧度为单位。

cosh(X)

  • 返回 X 的双曲余弦值。

degrees(X)

  • 将数值 X 从弧度单位转换为角度单位。

exp(X)

  • 计算 e(欧拉数,约等于 2.71828182845905)的 X 次幂(即计算 eˣ)。

floor(X)

  • 返回小于或等于 X 的最大整数,即通常所说的 “向下取整”。例如输入 3.9 会返回 3(向零点靠拢),输入 -3.2 会返回 -4(远离零点),输入 5.0 则直接返回 5。

ln(X)

  • 返回 X 的自然对数(即以 e 为底的对数,数学上通常表示为 ln X)。

log(X)、log10(X)、log(B, X)

  • 返回 X 的以 10 为底的对数(即常用对数)。对于双参数版本,则返回 X 的以 B 为底的对数。

  • 兼容性说明:SQLite 中 log() 函数的行为与 PostgreSQL 一致,均计算以 10 为底的对数。而大多数其他 SQL 数据库引擎中,log() 函数计算的是自然对数。在双参数版本 log(B, X) 中,第一个参数为底数,第二个参数为真数。这一点与 PostgreSQL 和 MySQL 相同,但与 SQL Server 相反:SQL Server 以第二个参数为底数,第一个参数为真数。

log2(X)

  • 返回数值 X 的以 2 为底的对数(即计算 log₂X)。

mod(X, Y)

  • 返回 X 除以 Y 后的余数。该函数与 ’%’ 运算符类似,不同之处在于它支持非整数参数。

pi()

  • 返回 π(圆周率)的近似值。

pow(X, Y)、power(X, Y)

  • 计算 X 的 Y 次幂(即计算 Xʸ)。

radians(X)

  • 将 X 从角度单位转换为弧度单位。

sin(X)

  • 返回 X 的正弦值,其中 X 以弧度为单位。

sinh(X)

  • 返回 X 的双曲正弦值。

sqrt(X)

  • 返回 X 的平方根。若 X 为负数,则返回 NULL。

tan(X)

  • 返回 X 的正切值,其中 X 以弧度为单位。

tanh(X)

  • 返回 X 的双曲正切值。

trunc(X)

  • 返回 X 的整数部分,且向零取整。trunc() 函数与 ceiling()、floor() 函数类似,但存在关键区别:trunc() 始终向零取整,而 ceiling() 始终向上取整,floor() 始终向下取整。
函数名核心取整规则示例(输入 → 输出)关键特点
trunc(X)向零取整,直接截断小数部分5.9 → 5;-3.2 → -3;2.0 → 2只看小数点后,无论正负,直接舍弃小数,结果靠近零点
ceiling(X)向上取整,取大于或等于 X 的最小整数5.1 → 6;-3.9 → -3;4.0 → 4无论正负,结果始终 “不小于” 输入值,向正方向靠拢
floor(X)向下取整,取小于或等于 X 的最大整数5.9 → 5;-3.1 → -4;3.0 → 3无论正负,结果始终 “不大于” 输入值,向负方向靠拢