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

DB2 11.5下如何用SQL查询验证SQL语句文本是否含*等特殊字符

问题描述

需要编写SQL查询验证给定的SQL语句文本是否包含星号*,示例目标SQL语句如下:

Insert into PERSON (PERSONID,STATUS,DISPLAYNAME,EMPLOYEETYPE) values ('JACOB','ACTIVE','Jacob',(select * from user where userid='JACOB'))

该SQL语句仅作为文本验证,不存储在表中。尝试了以下语句但出现语法错误(DB2版本为DB2/LINUXX8664 11.5):

WITH Query AS (
SELECT 'Insert into PERSON (PERSONID,STATUS,DISPLAYNAME,EMPLOYEETYPE) values (''JACOB'',''ACTIVE'',''Jacob'',(select * from user where userid=''JACOB''))' AS QueryText)SELECT
CASE
    WHEN LOCATE('*' IN QueryText) > 0 THEN 'Contains *'
    ELSE 'Does not contain *'
END AS result FROM Query;
正确实现方案

错误根源在于LOCATE函数的语法使用有误,DB2中LOCATE函数的正确格式是LOCATE(要查找的字符串, 目标字符串),不需要IN关键字。修正后的单条语句验证SQL如下:

WITH Query AS (
    SELECT 'Insert into PERSON (PERSONID,STATUS,DISPLAYNAME,EMPLOYEETYPE) values (''JACOB'',''ACTIVE'',''Jacob'',(select * from user where userid=''JACOB''))' AS QueryText
)
SELECT
    CASE
        WHEN LOCATE('*', QueryText) > 0 THEN 'Contains *'
        ELSE 'Does not contain *'
    END AS result
FROM Query;

如果需要批量验证多条SQL语句,可扩展CTE部分添加多行数据:

WITH Query AS (
    SELECT 'Insert into PERSON (PERSONID,STATUS) values (''JACOB'',''ACTIVE'')' AS QueryText, '语句1' AS label
    UNION ALL
    SELECT 'Insert into PERSON (PERSONID,STATUS,DISPLAYNAME) values (''JACOB'',''ACTIVE'',''Jacob'',(select * from user where userid=''JACOB''))' AS QueryText, '语句2' AS label
)
SELECT
    label,
    CASE
        WHEN LOCATE('*', QueryText) > 0 THEN 'Contains *'
        ELSE 'Does not contain *'
    END AS result
FROM Query;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:06:05