如何在 Sybase 中获取与给定字符串匹配的所有列名?

How can I get all column names matching a given string in Sybase?

我搜索了一下,但找不到关于此的具体问题。如何获取名称包含特定字符串的 table 中的所有列名称?具体来说,如果列名满足 like %bal% 那么我想编写一个查询,该查询将 return 该列名和其他在 Sybase 中满足该条件的查询。

编辑:Sybase RDBMS 是 Sybase IQ。

根据 OP 的附加评论更新:问题是针对 Sybase IQ 数据库的。


目前我面前没有 Sybase IQ 数据库,但我们应该能够根据 IQ 的系统拼凑出一个可行的查询 tables/views:

更简单的查询将使用系统视图SYSCOLUMNS:

select  cname
from    SYS.SYSCOLUMNS
where   tname = '<table_name>'
and     cname like '%<pattern_to_match>%'

或者违背系统 tables SYSTABLE and SYSCOLUMN:

select  c.column_name
from    SYS.SYSTABLE t
join    SYS.SYSCOLUMN c
on      t.table_id = c.table_id
where   t.table_name = '<table_name>'
and     c.column_name like '%<pattern_to_match>%'

注意:由于引用的 (ASE) 系统 tables (sysobjects, syscolumns) 也存在于 SQL Anywhere/IQ 产品中作为(部分)尝试提供 (ASE) T-SQL 兼容性。


假设这是 Sybase ASE,那么 sysobjectssyscolumns 之间的快速连接就足够了:

select  c.name
from    dbo.sysobjects o
join    dbo.syscolumns c
on      o.id = c.id
and     o.type in ('U','S')            -- 'U'ser or 'S'ystem table
where   o.name = '<table_name>'
and     c.name like '%<portion_of_column_name>%'

例如,假设我们要查找 sysobjects table 中列名包含字符串 'trig':

的所有列
select  c.name
from    dbo.sysobjects o
join    dbo.syscolumns c
on      o.id = c.id
and     o.type in ('U','S')
where   o.name = 'sysobjects'
and     c.name like '%trig%'
order by 1
go

 ----------
 deltrig
 instrig
 seltrig
 updtrig