如何在Teradata列描述中检索?含字符串搜索示例
嘿,这个问题我太熟悉了!Teradata里确实有专门的系统表能搞定这些需求,咱们一步步说:
一、如何检索Teradata中的列描述信息
Teradata的元数据都存在DBC库的系统视图里,最常用的就是DBC.ColumnsV(带V的是视图,比基表更友好)。你可以通过查询这个视图来获取所有列的描述信息。
举个栗子,如果你想查某个特定数据库(比如MY_DB)下某张表(比如CUSTOMER_INFO)的所有列及其描述,SQL可以这么写:
SELECT DatabaseName, TableName, ColumnName, ColumnTitle AS 列描述 FROM DBC.ColumnsV WHERE DatabaseName = 'MY_DB' AND TableName = 'CUSTOMER_INFO' ORDER BY ColumnId;
如果想查当前用户有权限访问的所有表的列描述,去掉WHERE里的数据库和表名限制就行。
注意:
ColumnTitle就是存储列描述的字段,有些老系统可能用的是Comment字段?不过大部分新版Teradata里都是ColumnTitle,你可以两个都试试。
二、如何在列描述中搜索特定单词/字符串
完全可以!只要在上面的查询里加个WHERE条件过滤就行,常用的有两种方式:
方式1:用LIKE模糊匹配
这是最直观的方式,比如你要找所有列描述里包含“Marketing”的列(包括你说的那个名为MKT的列),SQL可以这么写:
SELECT DatabaseName, TableName, ColumnName, ColumnTitle AS 列描述 FROM DBC.ColumnsV WHERE ColumnTitle LIKE '%Marketing%' ORDER BY DatabaseName, TableName, ColumnId;
如果担心大小写问题(Teradata默认是大小写敏感的),可以统一转成大写或小写来匹配,避免漏查:
SELECT DatabaseName, TableName, ColumnName, ColumnTitle AS 列描述 FROM DBC.ColumnsV WHERE UPPER(ColumnTitle) LIKE '%MARKETING%' ORDER BY DatabaseName, TableName, ColumnId;
方式2:用字符串定位函数(比如INSTR)
如果你想更精确地判断字符串是否存在,也可以用INSTR函数,返回值大于0就说明包含目标字符串:
SELECT DatabaseName, TableName, ColumnName, ColumnTitle AS 列描述 FROM DBC.ColumnsV WHERE INSTR(ColumnTitle, 'Marketing') > 0 ORDER BY DatabaseName, TableName, ColumnId;
小提醒:要查询DBC系统表,你需要有对应的SELECT权限,如果执行时提示权限不足,找你的DBA申请一下
SELECT ON DBC.ColumnsV的权限就行。
内容的提问来源于stack exchange,提问作者Meng zhao
相关产品推荐
相关产品推荐

