Я пытаюсь импортировать некоторые данные из CSV в MS SQL 2008 Server. Я использую PowerShell Invoke-SQL и сценарий SQL, который использует BULK INSERT
.
Поля CSV импортируются как VarChars, и я пытаюсь указать типы данных.
В данных, предоставленных в CSV (которые я не могу контролировать), некоторые поля даты и времени имеют дату / время в следующем формате:
2012-03-15 15:10:08.920000000
Обычно я просто использую ALTER и позволяю SQL преобразовывать его, и обычно это работает ... например:
ALTER TABLE [dbo].[ImportData] ALTER COLUMN [PlanSetupDate] datetime null;
но, когда он попадает в один из типов DateTime, как указано выше, происходит сбой с сообщением об ошибке:
Ошибка преобразования при преобразовании даты и / или времени из строки символов.
Затем я попытался преобразовать SQL:
Select Convert(datetime, '2012-03-15 15:10:08.920000000')
Но я получаю то же сообщение об ошибке, что и при использовании ALTER.
Если я вырежу лишние десятичные разряды (оставляя три или меньше), преобразование будет работать как положено, например:
2012-03-15 15:10:08.920
Я не могу просто обрезать последние X символов из поля перед преобразованием, потому что большинство других дат и времени в столбце имеют более традиционный формат, например 2010-01-05 00:00:00
.
Хотя я хочу сохранить его, доля времени на самом деле не так важна, определенно ничего после десятичного числа. Так что, если решение для его преобразования требует усечения его в десятичном формате, это нормально. :)
Я всегда мог изменить CSV, прежде чем импортировать его в SQL через PowerShell или тому подобное, но я бы предпочел всю свою обработку данных в SQL, если это возможно.
Итак, есть ли способ преобразовать этот проблемный формат даты и времени с помощью SQL-запроса?