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

查询表中唯一数据类型时,CHAR不同长度被判定为不同类型的问题

统计表的唯一基础数据类型

你遇到的问题是:原查询直接用data_type统计时,会把带不同长度/精度的同基础类型(比如CHAR(13)和CHAR(12))判定为不同类型,导致计数结果不符合预期。要实现将这类同基础类型视为同一类的需求,需要先提取类型的基础名称(忽略括号内的参数部分),再统计唯一值。

修改后的SQL查询

以下是支持正则替换的数据库(如PostgreSQL、MySQL)的解决方案:

WITH UniqueColumnTypes AS 
(
    SELECT 
        table_name,
        -- 用正则去掉括号及内部内容,只保留基础类型名
        COUNT(DISTINCT REGEXP_REPLACE(data_type, '\(.*\)', '', 'g')) AS unique_types
    FROM information_schema.columns
    WHERE table_schema NOT IN ('pg_catalog', 'information_schema')
    GROUP BY table_name
)
SELECT table_name, unique_types
FROM UniqueColumnTypes;

针对你的Book表验证

以Stud.Book表为例,处理后各列的基础类型会被统一为:

  • ISBN → CHAR
  • Title → VARCHAR
  • Publisher → CHAR
  • Year → SMALLINT
  • Pages → SMALLINT
  • Price → DECIMAL

统计后唯一类型数为4种,完全符合你的预期。

兼容无正则支持的数据库(如旧版SQL Server)

如果你的数据库不支持REGEXP_REPLACE,可以用字符串截取函数实现相同效果:

WITH UniqueColumnTypes AS 
(
    SELECT 
        table_name,
        COUNT(DISTINCT 
            CASE 
                WHEN CHARINDEX('(', data_type) > 0 THEN LEFT(data_type, CHARINDEX('(', data_type)-1) 
                ELSE data_type 
            END
        ) AS unique_types
    FROM information_schema.columns
    WHERE table_schema NOT IN ('pg_catalog', 'information_schema')
    GROUP BY table_name
)
SELECT table_name, unique_types
FROM UniqueColumnTypes;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:40:25