我写了以下查询:
从SYSCAT.TABLES中选择TBSPACE WHERE TYPE =‘T’AND(TABNAME LIKE’%_ABS_%‘或TABNAME LIKE’%_ACCT_%’)这给了我一定的结果。现在 …
如果你只是在寻找子串,你可以使用 LOCATE 。例如。
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))
CREATE TABLE TS(S VARCHAR(64))
SELECT DISTINCT TABNAME FROM SYSCAT.TABLES, TS WHERE TYPE='T' AND LOCATE(S,TABNAME) > 0
你可以试试 REGEXP_LIKE 。例如。
REGEXP_LIKE
SELECT DISTINCT TABNAME FROM SYSCAT.TABLES WHERE TYPE='T' AND REGEXP_LIKE(TABNAME,'.*_((ABS)|(ACCT))_.*')
以防万一。 注意,'_'字符在a中有特殊含义 pattern-expression 的 喜欢 谓语:
pattern-expression
下划线字符(_)表示任何单个字符。 百分号(%)表示零个或多个字符的字符串。 任何其他角色代表自己。
所以,如果你真的需要找到 _ABS_ substring,你应该使用类似下面的东西。 如果您使用注释掉的模式,则在结果中获得两行,这可能是不合需要的。
_ABS_
with pattern (str) as (values '%\_ABS\_%' --'%_ABS_%' ) , tables (tabname) as (values 'A*ABS*A' , 'A_ABS_A' ) select tabname from tables t where exists ( select 1 from pattern p where t.tabname like p.str escape '\' );