如何在Sybase IQ中获取匹配指定字符串的所有列名?
在Sybase IQ中查询名称包含指定字符串的列名
嘿,我刚好熟悉Sybase IQ的元数据查询逻辑,给你几个实用的语句来解决这个需求:
查询特定表中符合条件的列名
如果你已经知道目标表的名称,比如your_table_name,想要找出其中列名包含bal的所有列,可以用这个查询:
SELECT c.colname AS column_name FROM SYS.SYSTABLES t JOIN SYS.SYSCOLUMNS c ON t.table_id = c.table_id WHERE t.tabname = 'your_table_name' AND c.colname LIKE '%bal%' ORDER BY c.colname;
简单解释下各个部分:
SYS.SYSTABLES是Sybase IQ存储所有表信息的系统表,tabname存表名,table_id是表的唯一标识SYS.SYSCOLUMNS存储所有列的元数据,colname就是列名,通过table_id和表关联LIKE '%bal%'里的%是通配符,能匹配任意长度的字符(包括0个),所以这个条件会捕获所有包含bal子串的列名
查询全数据库中符合条件的列名
如果想遍历整个数据库,找出所有表中列名包含bal的列,可以加上表名一起返回,还能过滤掉系统表:
SELECT t.tabname AS table_name, c.colname AS column_name FROM SYS.SYSTABLES t JOIN SYS.SYSCOLUMNS c ON t.table_id = c.table_id WHERE c.colname LIKE '%bal%' AND t.type = 'U' -- 'U'代表用户创建的表,去掉这条会返回系统表的列 ORDER BY t.tabname, c.colname;
忽略大小写的匹配
如果你的数据库启用了大小写敏感,想要不区分大小写匹配bal,可以用LOWER()或UPPER()函数统一转换:
SELECT t.tabname AS table_name, c.colname AS column_name FROM SYS.SYSTABLES t JOIN SYS.SYSCOLUMNS c ON t.table_id = c.table_id WHERE LOWER(c.colname) LIKE '%bal%' AND t.type = 'U' ORDER BY t.tabname, c.colname;
这样不管列名是Balance、total_bal还是BALANCE,都会被匹配到。
内容的提问来源于stack exchange,提问作者Jojo
相关产品推荐
相关产品推荐

