我有来自excel的数据,只有年份和月份,例如2012-01
01是1月。
对于我的剧本:
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,然后转换字符串' yyyy-mm'到日期格式' yyyy-mm-dd'但我不确定该怎么做?
答案 0 :(得分: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;
这当然假设您可以将每个日期设置为该月的第一天。