2015-10-30 2 views
0

У меня есть база данных с несколькими столбцами, заполненными различными числовыми полями. При попытке заполнения из CSV я должен был отключить назначение полей с разделителями. Конечным результатом является столбец, содержащий «Правильную информацию», но также содержит данные следующего столбца, разделенные запятой.SQL: Исправлена ​​ошибка импорта CSV

Таким образом, вместо столбца UPC1, содержащего «958634», в нем содержится «958634,95877456». Предполагается, что «95877456» находится в столбце UPC2, а UPC2 - NULL.

Есть ли способ для разделения на запятую и отправки данных в UPC2, сохраняя данные UPC1 перед запятой в такт?

Спасибо.

+0

Yep 2-ступенчатый процесс. псевдокод ... 'Update table set col2 = right (col1 до запятой)' then' update table set col1 = left (col1 до запятой) 'при условии, что каждое значение имеет запятую в столбце 1. – xQbert

ответ

0

Вы можете сделать это с помощью строковых функций. Для запроса значений и проверить логику, попробуйте следующее:

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 здесь намного проще, чем вычисление точного количества символов, которые вам нужно довести до конца.

+0

Awesome. В UPC1 есть другие записи, которые все еще верны. (Все, что угодно 8 символов длинное или меньшее), я смогу запустить 'UPDATE myTable, где len (UPC1)> 8 SET UPC1 = LEFT (UPC1, CHARINDEX (',', UPC1) - 1), UPC2 = SUBSTRING (UPC1, CHARINDEX (',', UPC1) + 1, 1000); ' или что-то в этом роде? – user2890953

+0

Поскольку вы сказали «8 символов длиннее или меньше», было бы лучше проверить запятую в столбце, используя 'WHERE CHARINDEX (',', UPC1)> 0'. Обязательно поместите предложение «WHERE» последним: способ, которым вы его получили, будет синтаксической ошибкой. –

Смежные вопросы