2015-02-23 68 views
1

只是想知道是否有办法检查达到最大长度的表的列。检查表列已达最大长度

有了下面我能得到表列

SELECT MAX(CHARACTER_MAXIMUM_LENGTH) AS LEN, COLUMN_NAME 
FROM information_schema.columns 
WHERE table_name IN ('TableA') 
GROUP BY COLUMN_NAME 
ORDER BY LEN DESC 

然后我想检查的长度那些列是否达到其最大长度或不符合数据

列出了最大长度列

SELECT MAX(LENGTH(Col1)) 
FROM TableA 

由于它是不可能在WHERE子句中使用聚合函数,它是如何可能?

感谢

+0

使用having子句将cond函数与聚合函数结合使用。 – 2015-02-23 12:07:10

+0

你想让输出看起来像什么? – 2015-02-23 12:10:21

回答

1

您可以使用join带来的数据一起:

SELECT MaxLen, ActualLen 
FROM (SELECT MAX(CHARACTER_MAXIMUM_LENGTH) AS MaxLen, COLUMN_NAME 
     FROM information_schema.columns 
     WHERE table_name IN ('TableA') AND COLUMN_NAME = 'COL1' 
    ) m CROSS JOIN 
    (SELECT MAX(LENGTH(Col1)) as ActualLen 
     FROM TableA 
    ) c; 

我不知道你真正想要返回什么。如果您想要最大值的行:

select a.* 
from tablea a 
where length(col1) = (SELECT MAX(CHARACTER_MAXIMUM_LENGTH) AS MaxLen 
         FROM information_schema.columns 
         WHERE table_name IN ('TableA') AND COLUMN_NAME = 'COL1' 
        ); 
+0

感谢您的回复。该解决方案仅适用于一列。 我是在对表中的所有列进行此操作之后。那可能吗? – SMPH 2015-02-24 04:59:59

+0

@MPH。 。 。这听起来像是一个不同的问题。这个问题绝对使用单数的“列”。 – 2015-02-24 22:31:58

+0

这是一个错字,我在文章中指定了“列”。对于那个很抱歉。更新主题 – SMPH 2015-02-25 03:23:10