2012-01-15 20 views
2

SQLServer的datetime数据类型用来保存时间戳来工作,它是64位长 - http://msdn.microsoft.com/en-us/library/ms187819.aspxC++寻找一个健全的方式与SqlServer的数据类型的datetime

我正在寻找一个健全的方式与它合作C++,可能是boost库中的东西?

谢谢。

编辑

我会满足于能够做这两个操作:

  • 显示在一些人类可读的格式的时间,像2012-01-15 16:54:13.123
  • 解析像2012-01-15 16:54:13.123串入相应的SqlServer日期时间值。

EDIT2

以下是我知道到现在为止。我有一个datetime列的表格。当我从中选择行时,我得到这个列的数据类型为DBTYPE_DBTIMESTAMP。据http://msdn.microsoft.com/en-us/library/ms187819.aspx它应该是一个8字节的值,但是,我得到一个16字节的值,例如:

00070015000c07db 00000000001f0007 

我找不到这种格式的任何说明,但研究揭示了以下结构:

0007 0015 000c 07db 00000000 001f 0007 
^ ^^^   ^^
| | | |    | | 
| | | |    | +--- minutes (7) 
| | | |    +----+--- seconds (31) 
| | | +-------------+----+--- year (2011) 
| | +----+-------------+----+--- month (12) 
| +----+----+-------------+----+--- day  (21) 
+----+----+----+-------------+----+--- hour (7) 

对应于2011-12-21 07:07:31。所以,这似乎很容易,但文档在哪里? DBTYPE_DBTIMESTAMP值是否始终以此格式报告?是否SqlSever CE特定或Express和其他口味是否一样?它可以包含毫秒?

顺便说一句,我使用OLEDB访问数据库。

+4

有作为“理智的方式”没有这样的事用C++时,这就是为什么大家都喜欢它:)? – ScarletAmaranth 2012-01-15 14:45:30

+0

查看更新。 – mark 2012-01-15 14:57:15

+0

根据http://msdn.microsoft.com/en-us/library/bb677303.aspx MS SqlServer没有'TimeStamp'数据类型。 OLEDB名称为'DBTYPE_DBTIMESTAMP',它对应于SqlServer数据类型的'datetime'系列。 – mark 2012-01-16 08:48:55

回答

1

为什么不处理sql-server端的东西?

您可以编写一个视图,它将DBTYPE_DBTIMESTAMP作为datetime或varchar返回给您。你可以定义你想要的格式。

Use the cast()- or convert()- Function 

要回写值,可以在sql-server上写一个小函数。 你可以使用的功能:

Convert(datetime, [value], [format]) 
+0

我只有对数据库的只读访问权限,因此我无法创建任何视图。 – mark 2012-01-27 13:29:17

+1

你也可以在select语句中做到这一点! – chris 2012-01-27 13:54:22