【发布时间】:2010-07-14 11:16:53
【问题描述】:
我有一个非常大的 CSV 文件,我将它导入到一个 sqlite 表中。有超过 50 列,我想找到其中任何列为空的所有行。这甚至可能吗?我只是想节省自己在 where 子句中写出所有 50 个不同列的时间。谢谢。
【问题讨论】:
-
闻起来像你有重复组...见en.wikipedia.org/wiki/1NF
我有一个非常大的 CSV 文件,我将它导入到一个 sqlite 表中。有超过 50 列,我想找到其中任何列为空的所有行。这甚至可能吗?我只是想节省自己在 where 子句中写出所有 50 个不同列的时间。谢谢。
【问题讨论】:
这是一个有趣的问题,但编写一个快速脚本可能会更快,该脚本可以将复制/粘贴的标题行从 CSV 转换为适当的脚本。
例如,这适用于 LINQPad (C#)
void Main()
{
string input = "adasda|sadasd|adasd|";
char delim = '|';
StringBuilder sql = new StringBuilder();
sql.AppendLine("SELECT * FROM table WHERE ");
foreach (string s in input.Split(delim))
{
if (!String.IsNullOrEmpty(s))
sql.Append(s).AppendLine(" IS NULL OR ");
}
sql.ToString().Trim('\r', '\n', 'O', 'R',' ').Dump();
}
【讨论】:
没有。并非没有使用DESCRIBE TABLE 或中间技术的光标。
您最好的选择是DEFAULT NULL 列并重新导入数据。但根据 CSV 导入和列类型,您可能仍会在列中获得空值。
很糟糕,但只复制和粘贴 SQL 命令可能会更快。该脚本可以重复使用。
【讨论】: