SQLite 中的数学函数
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 | 无论正负,结果始终 “不大于” 输入值,向负方向靠拢 |