2011-03-10 156 views
0

我有一个Excel文件,其中包含一列满是日期的日期,格式为dd/mm/yyyy格式。当我尝试使用openrowset导入它时,它说有一个数据类型不匹配。我有一个表格,其中日期定义为date。现在,我知道SQL Server中的默认日期格式是yyyy-mm-dd。我怎样才能避免这种冲突?有没有办法让我的默认date类型为dd/mm/yyyy?我需要每天做这个导入操作,并且必须是自动化的,所以我承担不起它之间的失败。我尝试使用sp_addlanguage使它成为英国作为默认日期类型是dd/mm/yyyy那里,但它没有工作:(。我使用SQL Server 2008和Windows 7,如果这是任何帮助请帮我谢谢如何在SQL Server 2008中使默认日期格式为dd/mm/yyyy?

+0

它有助于更​​改Excel文件中的日期格式吗?或者是被忽略的格式? – Svish 2011-03-10 10:53:50

+0

@Svish:这是一个固定的格式,将来自其他地方,不能混淆。 – CodingInCircles 2011-03-10 10:56:41

回答

1

你可以在插入之前,所以,在OPENROWSET语句,这样你选择的领域,你可以用CONVERT发言围绕着它CONVERT传入的数据下面是一个例子!。:

print convert(date,'19/07/2010',103) 

这是英国式的日期,但如果你运行它,你可以看到它它转换成SQL友好的格式。

+0

@Tom:我有以下的SQL查询:'SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0; IMEX = 1; HDR = NO; DATABASE = D:\ Nemmadi Project \ Dummy Bank Statement .xls','Select * from [Sheet1 $]')'我应该在哪里添加'CONVERT'语句?此外,我可以在CSV格式中通过“批量插入”成功插入它。文件中的日期格式为:2011年3月1日(2011年3月1日)。我做了:'设置语言'英式英语' 从'D:\ Nemmadi Project \ Dummy Bank Statement.csv'批量插入bank_report与 (firstrow = 2,maxerrors = 0,FIELDTERMINATOR =',',ROWTERMINATOR ='\ n ')' – CodingInCircles 2011-03-10 11:26:44

+0

@Tom:但是当我查看表格时,日期被插入为:2011-03-01 00:00:00.000。该怎么办?在定义表格时,当我试图将日期列作为“DATE”类型时,“BULLK INSERT”拒绝工作,只有在创建“DATETIME”时才工作。任何解决方法? – CodingInCircles 2011-03-10 11:29:51

+0

首先,如果您指定了实际的行(您在完成*后会在行标题中看到名称),而不是选择*。我们假设它们是:Field1,Field2,Field3,而Field2是日期列。然后您可以重新编写语句:SELECT Field1,CONVERT(date,Field2,103),Field3 FROM OPENROWSET ...这将是我的首选方法,而不是搞乱语言设置......但如果它适合您.. – 2011-03-10 11:53:20