Oracle SQL:在所有列中查找前导或尾随空格?

lkaoscv7  于 2023-11-17  发布在  Oracle
关注(0)|答案(1)|浏览(121)

我有下面的数据集,我想找到有前导空格或尾随空格的列。我如何编写查询,它会显示有空格的确切值?
data

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 '% ';

字符串
上面的查询给出了以下输出,这对了解具有该值的列没有帮助。
output

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


我想要一个查询,它会给我以下输出:

| ID | FIELD_NAME | ISSUE_DESCRIPTION | FIELD_VALUES |
|----|------------|-------------------|--------------|
| 2  | LNAME      | Trailing Space    | Doe          |

P.S.:在实际的表中,我需要对35+列执行此检查。

cigdeys3

cigdeys31#

取消透视,然后使用SUBSTR(或LIKE)进行过滤,并使用CASE表达式生成问题描述:

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 id,
       column_name,
       CASE
       WHEN SUBSTR(value, 1, 1) = ' ' AND SUBSTR(value, -1, 1) = ' '
       THEN 'Leading and trailing space'
       WHEN SUBSTR(value, 1, 1) = ' '
       THEN 'Leading space'
       WHEN SUBSTR(value, -1, 1) = ' '
       THEN 'Trailing space'
       END AS issue_description,
       value
FROM   data
UNPIVOT (
  value FOR column_name IN (fname, lname)
)
WHERE   SUBSTR(value, 1, 1) = ' '
OR      SUBSTR(value, -1, 1) = ' ';

字符串
其输出:
| ID|栏目名称|问题描述|值|
| --|--|--|--|
| 2 |LNAME|尾随空格|Doe|
fiddle

相关问题