RIGHT函数可截取字符串右侧字符,但属非标准SQL函数,SQL Server、MySQL 8.0+原生支持,PostgreSQL需用SUBSTRING模拟,SQLite不支持,且各库对NULL处理逻辑不同。

RIGHT 函数能直接截取字符串右侧字符,但必须注意它在不同数据库中的行为差异和 NULL 处理逻辑。
RIGHT 函数的基本用法与跨数据库兼容性
SQL 标准不定义 RIGHT,它是多数主流数据库(如 SQL Server、MySQL 8.0+、PostgreSQL 通过 RIGHT 扩展或 SUBSTRING 模拟)提供的非标准函数。SQLite 和旧版 MySQL(SUBSTR 或 SUBSTRING 配合 LENGTH。
- SQL Server:
RIGHT(安全可用column_name, 3) - MySQL 8.0+:支持
RIGHT(;5.7 及更早版本需写成column_name, 3)SUBSTRING((负起始位置表示从右数)column_name, -3) - PostgreSQL:默认无
RIGHT,可用SUBSTRING(或安装column_nameFROM LENGTH(column_name) - 2 FOR 3)pg_tgrm后扩展(不推荐) - Oracle:不支持
RIGHT,应使用SUBSTR((负数起始位即从右截取)column_name, -3)
NULL 和空字符串的处理陷阱
RIGHT 对 NULL 输入返回 NULL,不是空字符串;对空字符串 '' 返回空字符串。若字段可能为 NULL,直接调用会导致结果列出现大量 NULL,掩盖真实数据问题。
- 安全写法(SQL Server/MySQL 8.0+):
RIGHT(ISNULL(或column_name, ''), 3)RIGHT(COALESCE(column_name, ''), 3) - 避免用
RIGHT(这类冗余表达式——它不会报错,但性能差且无意义column_name, LEN(column_name)) - 当截取长度超过原字符串长度时,
RIGHT自动返回整个字符串(不是报错),这点常被误认为“截取失败”
替代方案:用 SUBSTRING + LENGTH 实现最大兼容性
如果项目需支持多种数据库(如同时跑在 MySQL 5.7 和 PostgreSQL 上),硬依赖 RIGHT 会增加维护成本。统一用 SUBSTRING + LENGTH 更可靠。
SELECT SUBSTRING(name, LENGTH(name) - 2, 3) AS last_3_chars FROM users;
说明:
-
LENGTH(name) - 2是起始位置(从 1 开始计数),等效于“倒数第 3 个字符开始” - 第三个参数
3是截取长度;若想取最后 N 个字符,就写SUBSTRING(col, LENGTH(col) - N + 1, N) - 该写法在 MySQL、PostgreSQL、SQL Server、Oracle 均有效;SQLite 用
SUBSTR(少一个I)
实际开发中,最易被忽略的是数据库版本和 NULL 处理——写完 RIGHT 查询后没测过 NULL 字段,上线才发现关键字段批量变空;或者本地用 MySQL 8.0 写好,部署到客户环境的 MySQL 5.7 就报错 FUNCTION xxx.RIGHT does not exist。










