SQL:修复 CSV 导入错误
SQL: Fix for CSV import mistake
我有一个数据库,其中有多列填充了各种数字字段。在尝试从 CSV 填充时,我一定搞砸了分配分隔字段。最终结果是包含 It's Correct 信息的列,但也包含数据的下一列 - 用逗号分隔。
因此,UPC1 列不是包含“958634”,而是包含“958634,95877456”。 “95877456”应该在 UPC2 列中,而不是 UPC2 为 NULL。
有没有办法让我在逗号上拆分并将数据发送到 UPC2,同时保持逗号前的 UPC1 数据完好无损?
谢谢。
您可以使用字符串函数来完成此操作。要查询值并验证逻辑,试试这个:
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
将只是 return 到字符串的末尾。在这里使用 1000 比计算到最后所需的确切字符数要容易得多。
我有一个数据库,其中有多列填充了各种数字字段。在尝试从 CSV 填充时,我一定搞砸了分配分隔字段。最终结果是包含 It's Correct 信息的列,但也包含数据的下一列 - 用逗号分隔。
因此,UPC1 列不是包含“958634”,而是包含“958634,95877456”。 “95877456”应该在 UPC2 列中,而不是 UPC2 为 NULL。
有没有办法让我在逗号上拆分并将数据发送到 UPC2,同时保持逗号前的 UPC1 数据完好无损?
谢谢。
您可以使用字符串函数来完成此操作。要查询值并验证逻辑,试试这个:
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
将只是 return 到字符串的末尾。在这里使用 1000 比计算到最后所需的确切字符数要容易得多。