You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过查询获取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;

原查询的问题解析:

  1. 关联条件不全:仅匹配DatabaseName会让同库下所有列与所有表强制关联,产生大量冗余数据,导致ColumnType/ColumnLength返回无效值。
  2. 未过滤对象类型:不指定TableKind会包含视图、宏等对象,这类对象的部分元数据字段可能返回NULL或占位符。
  3. 数据类型字段误用:ColumnType在多数Teradata版本中并非直接返回可读类型,需要通过Type字段结合长度、小数位等字段拼接出完整类型。

补充提示:

  • 若需要查看视图的列信息,将TableKind改为V即可。
  • 可根据需求调整CASE语句,补充更多业务中用到的特殊数据类型。

内容的提问来源于stack exchange,提问作者Anshu Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 04:10:10