Excel文本或通用格式化date在SQL Server中导入和转换

我的同事有一个excel工作表,date,货币和百分比,格式化为“常规”之前,他们出口的工作表作为制表符分隔的文本文件。 这是为了捕获所有的原始数据,并消除格式化和舍入。 例如30%返回到0.29854的原始值。 导出文件被导入到SQL Server中。

我的问题是date设置为一个exell号码,我很难将其转换为date,一旦其导入到SQL Server中。 例子如下:

Date Fmt General Fmt 9/3/2008 39694 7/1/2010 40360 5/4/2011 40667 

有谁知道我可以如何将常规格式值导入SQL Server作为一个varchar,然后将其转换回date?

显而易见的答案是不格式化date作为一般,但我无法控制这个过程,不能改变它。

我曾尝试使用DATEADD()从1/1/1900转换date。 这是迄今为止最好的一个date。 有关详情,请参阅以下内容: http : //www.exceltactics.com/definitive-guide-using-dates-times-excel/#How-Excel-Stores-Dates

我发现这个解决scheme的问题是两天之后。

 select dateadd(d,39694,'1/1/1900') = 9/5/2008 { should be 9/3/2008 } select dateadd(dd,40360,'1/1/1900') = 7/3/2010 { should be 7/1/2010 } select dateadd(dd,40677,'1/1/1900') = 5/6/2011 { should be 5/4/2011 } 

我认识到这是最有可能的舍入错误,但有没有更好的方法来转换这个在SQL Server中捕获正确的date?

如果我简单地调整到DateAdd(d,#####,'12/30/1899'),我确实得到了正确的答案,但在未来的某个地方,这也将是一个rest日。 我不够聪明,搞清楚什么时候可能发生…

谢谢你的帮助。

Exceldate序列值有点搞砸了。 毫无疑问,微软会责备Lotus 1-2-3。

给定一个表示从19000301开始的date的Excel序列值,可以减去2以获取SQL Server将在相同date转换为datetime的整数。

给定一个表示19000101和19000228之间的date的Excel序列值,可以减1以获取SQL Server将在相同date转换为datetime的整数。

给定一个60的Excel序列值,你应该惊慌,因为这代表了19000229的虚拟date。

来源: http ://www.sqlteam.com/forums/topic.asp?TOPIC_ID=27101(在该论坛上从用户'X002548'复制)