Как форматировать только год и месяц из массовой вставки
У меня есть данные из 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;
Это, конечно, предполагает, что вы можете установить каждую дату на первое число месяца.