SQL:修复 CSV 导入错误

Posted

技术标签:

【中文标题】SQL:修复 CSV 导入错误【英文标题】:SQL: Fix for CSV import mistake 【发布时间】:2015-10-30 20:01:40 【问题描述】:

我有一个数据库,其中包含多个填充了各种数字字段的列。在尝试从 CSV 填充时,我一定搞砸了分配分隔字段。最终结果是包含 It's Correct 信息的列,但还包含下一列的数据(以逗号分隔)。

因此,UPC1 列不包含“958634”,而是包含“958634,95877456”。 “95877456”应该在 UPC2 列中,而不是 UPC2 为 NULL。

有没有办法让我在逗号上拆分并将数据发送到 UPC2,同时保持逗号之前的 UPC1 数据完好无损?

谢谢。

【问题讨论】:

是的 2 步过程。伪代码...Update table set col2 = right(col1 till the comma) then` update table set col1 = left(col1 until the comma)` 假设每个值在 col 1 中都有一个逗号。 【参考方案1】:

您可以使用字符串函数来做到这一点。要查询值并验证逻辑,请尝试以下操作:

SELECT
  LEFT(UPC1, CHARINDEX(',', UPC1) - 1),
  SUBSTRING(UPC1, CHARINDEX(',', UPC1) + 1, 1000)
FROM myTable;

如果结果是你想要的,那就把它变成更新:

UPDATE myTable SET
  UPC1 = LEFT(UPC1, CHARINDEX(',', UPC1) - 1),
  UPC2 = SUBSTRING(UPC1, CHARINDEX(',', UPC1) + 1, 1000);

UPC1 的表达式占用UPC1 的左侧,最多在逗号前一个字符。

UPC2 的表达式采用 UPC1 字符串的其余部分,以逗号后一个字符开头。

SUBSTRING 的第三个参数需要解释一下。它是您希望在字符串起始位置之后包含的字符数(在这种情况下,它是逗号位置之后的一个字符)。如果您指定的值比字符串 SUBSTRING 长,则只会返回到字符串的末尾。在这里使用 1000 比计算到达末尾所需的确切字符数要容易得多。

【讨论】:

太棒了。 UPC1 中还有其他条目仍然正确。 (任何 8 字符长或更短的内容都是正确的)我可以运行 UPDATE myTable where len(UPC1) > 8 SET UPC1 = LEFT(UPC1, CHARINDEX(',', UPC1) - 1), UPC2 = SUBSTRING(UPC1, CHARINDEX(',', UPC1) + 1, 1000); 或类似的东西吗? 既然您说“8 char long or less”,最好使用WHERE CHARINDEX(',', UPC1) > 0 检查列中的逗号。确保将WHERE 子句放在最后:你得到它的方式将是一个语法错误。

以上是关于SQL:修复 CSV 导入错误的主要内容,如果未能解决你的问题,请参考以下文章

将 Csv 文件导入到 postgres Cloud SQL 实例无效输入语法错误

markdown 修复导入的SQL文件的Sequel Pro SQL编码错误

使用 SQL Developer 将 CSV 文件导入 Oracle

text 在Ubuntu VPS上导入大型SQL时修复错误

无法从 d3 中的 csv 文件导入数据

使用 Powershell 将大型 CSV 批量导入 SQL Server