如何通过查询获取Teradata列的数据类型与精度?现有查询返回空值
正确的Teradata列名与数据类型查询语句
先修正原查询的问题,同时组合出准确可读的数据类型:
SELECT c.DatabaseName, c.TableName, c.ColumnName, -- 拼接完整的数据类型字符串 CASE c.Type WHEN 'C' THEN 'VARCHAR(' || c.ColumnLength || ')' WHEN 'CV' THEN 'VARBYTE(' || c.ColumnLength || ')' WHEN 'I' THEN 'INTEGER' WHEN 'B' THEN 'BIGINT' WHEN 'SI' THEN 'SMALLINT' WHEN 'F' THEN 'FLOAT' WHEN 'D' THEN 'DECIMAL(' || c.ColumnLength || ',' || c.DecimalDigits || ')' WHEN 'DATE' THEN 'DATE' WHEN 'TIME' THEN 'TIME' WHEN 'TIMESTAMP' THEN 'TIMESTAMP' WHEN 'TZ' THEN 'TIMESTAMP WITH TIME ZONE' ELSE c.Type -- 兼容未覆盖的特殊类型 END AS ColumnDataType, c.ColumnLength, c.DecimalDigits FROM dbc.ColumnsV c JOIN dbc.TablesV t ON c.DatabaseName = t.DatabaseName AND c.TableName = t.TableName -- 必须关联表名,否则会产生笛卡尔积 WHERE t.TableKind = 'T' -- 仅查询普通表,可选:'V'为视图、'M'为宏 -- 可添加过滤条件缩小范围 -- AND c.DatabaseName = '目标数据库名' -- AND c.TableName = '目标表名' ORDER BY c.DatabaseName, c.TableName, c.ColumnId;
原查询的问题解析:
- 关联条件不全:仅匹配
DatabaseName会让同库下所有列与所有表强制关联,产生大量冗余数据,导致ColumnType/ColumnLength返回无效值。 - 未过滤对象类型:不指定
TableKind会包含视图、宏等对象,这类对象的部分元数据字段可能返回NULL或占位符。 - 数据类型字段误用:
ColumnType在多数Teradata版本中并非直接返回可读类型,需要通过Type字段结合长度、小数位等字段拼接出完整类型。
补充提示:
- 若需要查看视图的列信息,将
TableKind改为V即可。 - 可根据需求调整
CASE语句,补充更多业务中用到的特殊数据类型。
内容的提问来源于stack exchange,提问作者Anshu Sam
相关产品推荐
相关产品推荐

