我写了以下查询:
SELECT TBSPACE FROM SYSCAT.TABLES WHERE TYPE='T' AND (TABNAME LIKE '%_ABS_%' OR TABNAME LIKE '%_ACCT_%')
这给了我一定数量的结果。现在的问题是,我有多个TABNAME
使用LIKE
运算符来选择(〜200)。 是否有一种有效的方式来编写200个值的查询而无需重复TABNAME LIKE
部分(因为有200个这样的值会导致非常大的查询)?
(如果有帮助,我已将所有必需的TABNAME
值存储在表TS
中以进行检索)
答案 0 :(得分:1)
如果您只是在寻找子字符串,则可以使用LOCATE
。例如
WITH SS(S) AS (
VALUES
('_ABS_')
, ('_ACCT_')
)
SELECT DISTINCT
TABNAME
FROM
SYSCAT.TABLES, SS
WHERE
TYPE='T'
AND LOCATE(S,TABNAME) > 0
或者如果您的子字符串在表CREATE TABLE TS(S VARCHAR(64))
SELECT DISTINCT
TABNAME
FROM
SYSCAT.TABLES, TS
WHERE
TYPE='T'
AND LOCATE(S,TABNAME) > 0
答案 1 :(得分:0)
您可以尝试REGEXP_LIKE
。例如
SELECT DISTINCT
TABNAME
FROM
SYSCAT.TABLES
WHERE
TYPE='T'
AND REGEXP_LIKE(TABNAME,'.*_((ABS)|(ACCT))_.*')
答案 2 :(得分:0)
以防万一。
请注意,{_ 3}}谓词的sudo ln -s locationOfLibFromAboveCommand locationItShouldBe
中的'_'字符具有特殊含义:
- 下划线字符(_)表示任何单个字符。
- 百分号(%)表示一个零个或多个字符的字符串。
- 其他任何字符都代表自己。
因此,如果您确实需要找到pattern-expression
子字符串,则应使用类似下面的内容。
如果您改用注释掉的模式,则可能会在结果中得到两行。
_ABS_