SQL SQRT函数用于计算非负数的平方根,语法为SQRT(number),支持常量、列名或表达式;需确保输入≥0,否则报错或返回NULL;不同数据库(如MySQL、PostgreSQL、SQL Server、Oracle)均支持,但SQLite需用POWER(x,0.5)替代。

SQL SQRT函数在不同数据库中的基本用法
SQRT 是标准数学函数,但不是所有数据库都原生支持。PostgreSQL、MySQL 8.0+、SQL Server(从 2005 起)和 Oracle 都提供 SQRT(),而 SQLite 默认不带该函数(需自定义或改用 POWER(x, 0.5))。使用前先确认你的数据库是否支持:
SELECT SQRT(16);如果报错
function does not exist 或类似提示,说明不支持或拼写/大小写有误(比如 PostgreSQL 对大小写不敏感,但某些配置下函数名需小写)。
处理 NULL 和负数时的常见错误
SQRT() 对负数会直接报错:MySQL 报 Invalid argument for function sqrt,PostgreSQL 报 cannot take square root of a negative number,SQL Server 报 Domain error。NULL 输入则返回 NULL,这点倒是一致。实际查表时,必须提前过滤或转换:
- 用
WHERE value >= 0排除负值行 - 用
CASE WHEN value 主动兜底 - 避免对未清洗的用户输入字段(如评分、温度差值)直接套
SQRT()
替代方案:当 SQRT 不可用或需要兼容老版本时
SQLite 和旧版 MySQL(SQRT(),但可用幂运算模拟:POWER(x, 0.5) 或 x ** 0.5(PostgreSQL 支持双星号)。注意:POWER() 在 SQL Server 中参数顺序是 POWER(base, exponent),别写反;MySQL 5.7 及以前不支持 POWER() 的小数指数,得用 POW(x, 0.5)。另外,浮点精度问题会导致 SQRT(4) 返回 2.0000000000000004,若需整数结果,加 ROUND(SQRT(x), 0)。
性能与索引注意事项
对字段用 SQRT(col) 做 WHERE 条件(如 WHERE SQRT(score) > 5)无法走索引,因为函数破坏了列的有序性。正确做法是把条件转回原始域:WHERE score > 25。如果业务逻辑强依赖平方根值(比如归一化计算),建议在应用层或物化视图中预计算并建索引,而不是每次查询实时算。另外,SQRT() 本身开销极小,瓶颈通常来自数据量或 I/O,而非函数调用。
真正容易被忽略的是跨数据库迁移时的函数兼容性——同一段 SQL 换个数据库就挂,尤其在用 ORM 自动生成 SQL 时,SQRT 很可能被静默替换成非等价表达式。上线前务必在目标环境跑一遍真实数据验证。

















