【发布时间】:2020-04-07 14:35:45
【问题描述】:
尊敬的专家, 我准备了一个 SQL 报告,以使用 CASE 显示带有 Format_Check 验证的数据。我在下面提供了示例、问题和期望:
表结构:enter image description here
SQL 语句:
SELECT
ID,PRODUCT,COMMENTS
CASE WHEN SUBSTR(COMMENTS,1,35)=REGEXP_SUBSTR (COMMENTS,'(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\s)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\s)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\s)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)',1,1)
AND
LENGTH(TRIM(REGEXP_SUBSTR (COMMENTS, '(\S*)(\s)', 1, 2)))=8
AND
REGEXP_LIKE(TRIM(REGEXP_SUBSTR (COMMENTS, '(\S*)(\s)', 1, 1)),'(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)')
THEN 'Correct Format'
ELSE 'Incorrect_Format'
END AS Format_Check
FROM TEST_TABLE
SQL 输出: enter image description here
SQL 输出说明:
检查 COMMENTS 列是否为 35 个字符长,还检查格式数字和空格。 SUBSTR(COMMENTS,1,35)=REGEXP_SUBSTR (评论,'(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\s)(\d)(\d)(\ d)(\d)(\d)(\d)(\d)(\d)(\s)(\d)(\d)(\d)(\d)(\d)(\d) (\d)(\d)(\s)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)',1,1)
检查第一个空格后的 cmets 是否为 8 个字符长 LENGTH(TRIM(REGEXP_SUBSTR (COMMENTS, '(\S*)(\s)', 1, 2)))=8
检查前 8 个字符是数字/数字。 REGEXP_LIKE(TRIM(REGEXP_SUBSTR (COMMENTS, '(\S*)(\s)', 1, 1)),'(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)')
预期:
我只需要在执行 SQL 时显示“格式不正确”的 cmets,我不希望看到“正确格式”的 cmets。但是,我需要您就这种情况是否与 WHERE 子句一起使用以仅显示不正确的格式 COMMENTS 提出建议。 我参考了以前与 WHERE 和 CASE 相关的查询,但是我无法弄清楚如何在 WHERE 子句中传递我的案例。 感谢您的帮助。
【问题讨论】:
标签: sql oracle case where-clause