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

Oracle SQL技术问询:定位含首尾空格的列及具体值(适配多列)

找出含前导/尾随空格的列并输出明细SQL方案

问题场景

现有如下数据集,需要找出存在前导或尾随空格的列,并明确显示问题列、问题描述及对应值:

原数据集

WITH data AS (
    SELECT '1' id, 'Jim' fname, 'Jam' lname     FROM dual UNION
    SELECT '2' id, 'Jon' fname, 'Doe ' lname    FROM dual UNION
    SELECT '3' id, 'Sam' fname, 'Lee' lname     FROM dual
)

原查询的不足

原查询仅能筛选出存在问题的行,但无法明确指出具体哪一列有问题:

SELECT *
FROM data
WHERE fname LIKE ' %' OR fname LIKE '% ' OR lname LIKE ' %' OR lname LIKE '% ';

输出仅显示行数据,无法定位问题列:

| ID | FNAME | LNAME |
|----|-------|-------|
| 2  | Jon   | Doe   |

目标输出格式

期望得到能明确标注问题的结果:

| ID | FIELD_NAME | ISSUE_DESCRIPTION | FIELD_VALUES |
|----|------------|-------------------|--------------|
| 2  | LNAME      | 尾随空格          | Doe          |

适配多列的解决方案

针对35+列的场景,可通过UNION ALL将每一列的检查逻辑拆分,批量生成结果:

WITH data AS (
    SELECT '1' id, 'Jim' fname, 'Jam' lname     FROM dual UNION
    SELECT '2' id, 'Jon' fname, 'Doe ' lname    FROM dual UNION
    SELECT '3' id, 'Sam' fname, 'Lee' lname     FROM dual
)
-- 检查fname列
SELECT 
    id,
    'FNAME' AS field_name,
    CASE 
        WHEN fname LIKE ' %' THEN '前导空格'
        WHEN fname LIKE '% ' THEN '尾随空格'
        ELSE '前后均有空格'
    END AS issue_description,
    TRIM(fname) AS field_values
FROM data
WHERE fname LIKE ' %' OR fname LIKE '% '

UNION ALL

-- 检查lname列
SELECT 
    id,
    'LNAME' AS field_name,
    CASE 
        WHEN lname LIKE ' %' THEN '前导空格'
        WHEN lname LIKE '% ' THEN '尾随空格'
        ELSE '前后均有空格'
    END AS issue_description,
    TRIM(lname) AS field_values
FROM data
WHERE lname LIKE ' %' OR lname LIKE '% '

-- 后续列以此类推,复制上述结构替换列名即可

说明

  • 每一列对应一个SELECT块,通过UNION ALL合并结果,无需修改主查询逻辑,仅需替换列名即可快速适配35+列的检查需求
  • TRIM()函数用于返回去除前后空格后的原始有效值
  • CASE语句精准区分前导空格、尾随空格或两者皆有的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 18:18:42