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编码错误