Как форматировать только год и месяц из массовой вставки

У меня есть данные из Excel, которые имеют только год и месяц, например, 2012-01

С 01 девочкой января.

Для моего сценария:

IF OBJECT_ID('[test].[dbo].[yearMONTH]', 'U') IS NOT NULL
   begin
      DROP TABLE [test].[dbo].yearMONTH;
      print 'Dropped Table [test].[dbo].[yearMONTH]';
   end
GO


CREATE TABLE [test].[dbo].[yearMONTH]
    (
    [yearMONTH]     date
    );
GO

BULK INSERT [test] FROM 'C:\Users\....csv'
With 
   (
   FirstROW = 2,
   FIELDTERMINATOR = ',',
   ROWTERMINATOR = '\n'
   );

Я знаю, что это не удастся, так как SQL не распознает формат даты данных.

Я думал, чтобы ввести его в виде строки? но это по-прежнему не решит проблему хранения в SQL как год-месяц-даты.



Придется ли мне массово вставлять данные как varchar? затем преобразовать тип данных в дату, чтобы каждый [год-месяц] имел 01 в конце дня, например, 2012-01-01, затем обрезать день и поместить год-месяц в отдельный столбец?

Единственное, что я вижу в этом решении, это то, что новая дата [год - месяц] не будет храниться в формате даты после того, как я отделю год и месяц от дня?


Я полагаю, что первый шаг - это импортировать данные из Excel в SQL, а затем преобразовать строку "гггг-мм" в формат даты "гггг-мм-дд", но я не уверен, как это сделать?

1 ответ

Решение

Один из вариантов грубой силы - просто вставить частичную дату 2018-02 данные в виде текста, а затем построить столбец даты:

ALTER TABLE test ADD your_date DATETIME;

UPDATE test
SET your_date = CONVERT(date, orig_date + '-01');

Затем вы можете удалить исходный текстовый столбец даты, если он вам больше не нужен:

ALTER TABLE test DROP COLUMN orig_date;

Это, конечно, предполагает, что вы можете установить каждую дату на первое число месяца.

Другие вопросы по тегам