dynamic-like-in-where子句语句

bd1hkmkf  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(331)

我一直在努力实现like语句的动态查询
从下面的sql查询而不是对每个值执行ilike,它可能会大量增长。我无法为新表名称值一次又一次地重写查询。。我可以将这些值存储在一个单独的表中,但是如何动态地实现它呢

SELECT
        t.table_name as table_name,
        t.table_schema as table_schema
    FROM
       information_schema.tables T
    WHERE  (table_schema  ilike 'stage' and table_name  like 'ABC%') or (table_schema  ilike 'stage' and table_name  like 'EFG%');

我可以用另一个表列出如下所示的值
创建或替换表tempdw.blk_table;(数据库名称varchar,tbl\u expr varchar);
插入tempdw.blk_表值('stage','%');插入tempdw.blk_表值('stage','efg%');
从tempdw.blk_表中选择*;

ezykj2lf

ezykj2lf1#

如果您有一个包含表和架构的表,则可以随时整理联接以处理区分大小写的部分:

SELECT
    t.table_name as table_name,
    t.table_schema as table_schema
FROM
   information_schema.tables T
JOIN
   table_names tn
ON collate(t.table_name , 'en-ci') like collate(tn.table_name , 'en-ci')
AND collate(t.table_schema, 'en-ci') = collate(tn.schema_name, 'en-ci');
qv7cva1a

qv7cva1a2#

如果您只是在寻找一组带有前缀的表,那么可以使用 regexp_like() :

where table_schema ilike 'stage' and
      regexp(lower(table_name), '^abc|efg')

相关问题