数据库中对超过100字符的字符串截断并追加...的最优实现方案
数据库侧实现截断追加省略号的最优方案
根据你使用的数据库类型,可直接使用内置的条件判断函数搭配现有截取逻辑实现,完全不需要额外网络开销,以下是主流数据库的实现方式:
通用实现逻辑
核心逻辑是用字符长度判断函数判断原字符串长度是否超过100,超过则拼接...,否则返回原字符串:
- 长度判断优先使用
CHAR_LENGTH(s)(注意不要用LENGTH,后者统计的是字节数,遇到多字节字符比如中文会计算错误)
各数据库具体实现
MySQL / MariaDB
使用IF函数即可,写法最简单:
SELECT IF(CHAR_LENGTH(s) > 100, CONCAT(SUBSTRING(s, 1, 100), '...'), s) AS truncated_str FROM your_table;
PostgreSQL
可以用CASE WHEN或者内置的LEFT函数简化截取:
SELECT CASE WHEN CHAR_LENGTH(s) > 100 THEN LEFT(s, 100) || '...' ELSE s END AS truncated_str FROM your_table;
SQL Server
同样用CASE WHEN搭配LEN函数(SQL Server的LEN默认统计字符数而非字节数):
SELECT CASE WHEN LEN(s) > 100 THEN SUBSTRING(s, 1, 100) + '...' ELSE s END AS truncated_str FROM your_table;
Oracle
使用CASE WHEN搭配LENGTH函数:
SELECT CASE WHEN LENGTH(s) > 100 THEN SUBSTR(s, 1, 100) || '...' ELSE s END AS truncated_str FROM your_table;
优化提示
如果需要频繁用到这个逻辑,可以直接在数据库里创建一个自定义函数封装上述逻辑,调用时直接传字符串和截断长度即可,复用性更高。
内容的提问来源于stack exchange,提问作者glarkou
相关产品推荐
相关产品推荐

