0

我正在寻找数据迁移项目中丢失的数据,这份报告对我有很大帮助。

给定一个 MySQL 表,我想计算该表每一行中的所有空值(NULL 或 '')。输出将是列名列表以及每列的空行或非空行数。我会手动将这些数据与源表进行比较 - 手动进行比较,因为我希望很少有计数完全匹配,并且源表和导入表之间的列名完全不同。

我有大约 30 个表要检查,其中一些有 100 列。我可以从我的 PC 直接访问 MySQL,但无法使用数据库在服务器上运行任何脚本。

表 A 示例

Col1 Col2 Col3
'XX' NULL 'XX'
'XX' NULL ''
'XX' 'XX' 'XX'
'XX' ''   'XX'

我想要的报告是(对于非空计数,''算为空):

Col1: 4
Col2: 1
Col3: 3
4

4 回答 4

10

COUNT也计算空字符串,因此您的查询应如下所示:

SELECT COUNT( NULLIF( col1, '' ) ), COUNT( NULLIF( col2, '' ) ), ...
于 2011-08-27T23:32:04.303 回答
2

您可以对每个表使用以下查询

SELECT COUNT(*), COUNT(col1) as col1, COUNT(col2) as col2
FROM TABLE1

要获取特定表的所有列,您应该运行查询

 select column_name from information_schema.columns where TABLE_NAME='TABLE1';

此查询的结果可用于自动生成查询,如第一个查询。

于 2011-08-27T22:51:30.820 回答
1

仅计算具有值的行(跳过 Null/Empty 行)!!!

SELECT COUNT( NULLIF( Column_Name, '' ) ) from Table_name
于 2014-12-19T17:00:56.317 回答
0

这对我有用

SELECT count( NULLIF( doctor_id, '' )) as doctor_count,count( NULLIF( chemist_id, '' )) as chemistcount from table_name WHERE employee_id="20";
于 2017-11-11T05:26:15.020 回答