首页 文章

如何仅从批量插入格式化年份和月份

提问于
浏览
1

我有来自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赢得了't recognise the data'的日期格式 .

我想把它作为一个字符串输入?但是仍然无法解决将其作为年份日期存储在SQL中的问题 .

我是否必须将数据批量插入varchar?然后将数据类型转换为日期,每个[年 - 月]在一天结束时具有01,例如2012-01-01,然后在一个单独的专栏中截断日期和年份?

我唯一看到的解决方案是新的[年 - 月]日期一旦我将年份和月份分开,就不会被存储为日期格式?

我想第一步是将数据从excel导入sql,然后将字符串'yyyy-mm'转换为日期格式'yyyy-mm-dd',但我不知道该怎么做?

1 回答

  • 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;
    

    这当然假设您可以将每个日期设置为该月的第一天 .

相关问题