You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL IF条件语句实现字段按需添加空格后拼接合并

问题场景
  • 库表存在name_line1、name_line2两个VARCHAR(30)字段,数据来源是前端单输入项name通过substr函数拆分存入,其中name_line1存储时不会保留尾随空格。
  • 固定加空格的拼接方案不适用:拆分点可能落在单词中间,例如下方示例中拆分点落在Stationaries的n字符位置,固定加空格会把完整单词拆成两个带空格的部分:
HERE
    Experimental unit 1998 Station|aries Sdn Bhd.
          name_line1                    name_line2
  • 实现目标:编写SQL完成两个字段的合并,按业务规则判断是否需要在两字段间拼接空格,比如当name_line1长度不为30且name_line2存在有效内容时加空格,同时兼容拆分点落在单词中间的场景。
实现方案

核心判断逻辑不需要依赖复杂的词典,只需要根据拆分位置的字符特征判断即可:

  1. 如果name_line2是NULL或者全为空格,直接返回RTRIM(name_line1)即可,不需要拼接
  2. 如果name_line1去尾随空格后长度小于30,说明原名称长度没撑满第一行的存储上限,拆分点必然在单词间隔处,拼接时补单个空格
  3. 如果name_line1去空格后长度刚好为30,说明是被字段长度截断的,此时看两个字段邻接位置的字符:如果name_line1最后一个字符、name_line2第一个字符都不是空格,说明拆分点落在单词中间,直接拼接不需要加空格;否则补单个空格
  4. 拼接前统一对name_line1做尾随空格去除、对name_line2做前导空格去除,避免出现连续空格

对应可直接使用的SQL代码如下:

SELECT
  RTRIM(name_line1)
  || CASE
      WHEN TRIM(name_line2) IS NULL OR TRIM(name_line2) = '' THEN ''
      WHEN LENGTH(RTRIM(name_line1)) < 30 THEN ' '
      WHEN SUBSTR(RTRIM(name_line1), -1) != ' ' AND SUBSTR(LTRIM(name_line2), 1, 1) != ' ' THEN ''
      ELSE ' '
    END
  || LTRIM(name_line2) AS full_name
FROM your_table_name;

效果验证

  • 拆分落在单词中间的场景:name_line1='Experimental unit 1998 Station'、name_line2='aries Sdn Bhd.',拼接结果为Experimental unit 1998 Stationaries Sdn Bhd.,无多余空格
  • 拆分落在单词间隔的场景:name_line1='Experimental unit 1998'(长度不足30)、name_line2=' Stationaries Sdn Bhd.',拼接结果为Experimental unit 1998 Stationaries Sdn Bhd.,无连续空格
  • 第二行无有效内容的场景:name_line1='Test Company'、name_line2=' ',拼接结果为Test Company,无多余尾随空格

内容的提问来源于stack exchange,提问作者pebble unit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 18:39:27