MSSQL конвертировать VARCHAR с пользовательским форматом на сегодняшний день - PullRequest
0 голосов
/ 07 ноября 2018

Я читаю CSV с BULK INSERT. В этом CSV у меня есть даты в формате MMM yyyy (например, Jan 2016).

Как лучше всего преобразовать этот varchar в столбец даты?


Пока что я нашел решения только с использованием встроенных форматов. Ни один из этих форматов не соответствует моему формату. Также обратите внимание, что отсутствующий day должен получить значение 01. Это приводит к следующему преобразованию:

Jan 2016 -> 2016-01-01 (формат второй даты фактически не имеет значения. Обычно я использую yyyy-MM-dd)

1 Ответ

0 голосов
/ 07 ноября 2018

Примечание: решение за один шаг см. @ Комментарий Сергея ; предлагаемое решение работает даже без дневной составляющей даты.


Оригинальный ответ

Я не знаю, как это сделать в самом операторе bulk insert. Однако сделать это как двухэтапный процесс довольно просто:

  1. Импорт данных в столбец varchar:

    bulk insert MyDatabase.dbo.MyStagingTable  
    from '\\server\share\data.csv'; 
    
  2. Затем конвертируйте varchar в дату. Это можно сделать как заявление об обновлении; хотя более вероятно, что вы захотите выполнить импорт в таблицу staging, преобразование выполняется при перемещении этих данных из промежуточной в фактическую таблицу.

    insert MyDatabase.dbo.MyActualTable (RealDate /*, ... */)
    select convert(date, '01 ' + myPseudoDate, 106) /*, ... */
    from MyDatabase.dbo.MyStagingTable 
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...