2011-04-20 100 views
1

我有一个场景,我必须将数据从Oracle表移动到SQL Server表。 Oracle中的列是Timestamp(6)6是精度。现在我无法以字符串格式发送Oracle Data。我直接从Oracle表中获取数据,因此无法在Oracle端进行格式化。我能做的是使用VB6.Format格式化数据,以使其适合于SQL Server DateTime。我正在为Oracle日期到SQL Server日期时间这样做。如何在SQL Server中存储Oracle时间戳精度6日期时间

对于时间戳和日期时间可以做类似的事情。

+0

如果您使用'DATETIME'(精确到三分之一秒),它们不会损失精度吗?同上VB6的Date类型和临时功能只能精确到1秒(包括它的Format()函数)? – onedaywhen 2011-04-20 10:34:25

+1

如果你在SQL Server 2008上,你可以使用'datetime2(6)'。 – 2011-04-20 11:48:43

+0

@MikaelEriksson应该是答案!好一个 – 2014-03-28 16:24:10

回答

4

这取决于您使用的SQL服务器的版本。正如@onedaywhen在他的评论中指出的那样,你可以使用DATETIME,但是你会失去一些精确度,因为DATETIME只能精确到3位十进制数(精度为3.33毫秒)。但是,如果您使用的是早期版本的SQL Server,那就是您所拥有的。

如果您运行的是SQL Server 2008,则可以使用DATETIME2,它精确到100纳秒或7位数,这将处理您要做的事情。

如果你真的想要你可以使用DECIMAL列破解一些代表日期/时间的东西。你可能会做的列DECIMAL(20,6),并格式化为

YYYYMMDDHHIISS.ffffff

其中

YYYY=year 
MM=month (01-12) 
DD=day 
HH=hour (24 hour clock) 
II=minutes 
SS=seconds 
ffffff=fractional seconds 

实施就留给读者做练习。 (CAVEAT:你应该选择使用类似的东西,注意这个相同的日期/时间格式被用作原始版本的死灵书中计时的基础,而且据传直接导致作者,Abdul Alhazred,被称为“疯狂的阿拉伯人”。:-)

Cthulhu fthagn。