Oracle SQL字符串拼接问题:含空值时如何避免多余符号
解决字符串拼接时的多余符号问题
针对Title为空时出现多余. 的问题,核心思路是仅当Title非空时才拼接. ,同时兼顾fname或lname为空的情况,以下是几种常用SQL方言的实现方案:
通用最优方案(CASE + CONCAT_WS)
CONCAT_WS会自动忽略空值,用指定分隔符连接非空字段,配合CASE处理Title的后缀:
CONCAT_WS(' ', CASE WHEN title IS NOT NULL AND title != '' THEN title || '.' END, fname, lname )
- 当Title非空时,生成
Title.,再和fname、lname用空格连接 - 当Title为空/NULL时,CASE返回NULL,
CONCAT_WS直接跳过它,避免多余的. - 若fname或lname为空,也不会产生多余空格
分数据库简化写法
PostgreSQL/MySQL
利用NULLIF简化判断逻辑:
CONCAT_WS(' ', NULLIF(title || '.', '.'), fname, lname )
NULLIF(title || '.', '.')的作用是:如果Title为空,title || '.'结果是.,此时返回NULL被CONCAT_WS忽略;如果Title非空,返回Title.。
SQL Server
用IIF替代CASE更简洁:
CONCAT_WS(' ', IIF(title IS NOT NULL AND title != '', title + '.', NULL), fname, lname )
全兼容分支写法
如果不想用CONCAT_WS,可以用完整CASE分支处理所有场景:
CASE WHEN title IS NOT NULL AND title != '' THEN title || '. ' || TRIM(CONCAT(fname, ' ', lname)) ELSE TRIM(CONCAT(fname, ' ', lname)) END
TRIM用来清除fname和lname都为空时的多余空格,避免返回空字符串。
内容的提问来源于stack exchange,提问作者Grandmarkkk
相关产品推荐
相关产品推荐

