将DateTime存储为SQL Server 2008中独立于文化的文件

时间:2013-09-27 11:14:20

标签: sql sql-server sql-server-2008 datetime

我目前面临的挑战是在NVarChar字段中存储DateTime值,以使其独立于文化。

我已经读过你可以使用CONVERT(int, GETDATE(), 112)将值转换为int,这应该使它与文化无关,但前一个语句不会存储时间。

将DateTime存储为独立于文化的行业标准是什么?

  • EDIT

请注意,我无法在我的场景中使用DateTime。它必须是NVarChar。

  • 编辑2

好的,找到了我自己问题的答案。

将DateTime转换为二进制(8)原始格式: convert(binary(8),GETDATE())

然后我将值存储在VARCHAR字段中,如下所示: CONVERT(VARCHAR(MAX),转换(二进制(8),GETDATE()),2)

要从varchar字段中检索它并将其转换为DateTime: CONVERT(DateTime,CONVERT(binary(8),[TextField],2))

就像我所关注的那样,这会将DateTime存储为独立于文化。

  • 编辑3

似乎用户Kaf拥有最佳解决方案。我宁愿使用格式126将其转换为文本,然后从文本返回DateTime。

谢谢大家,对此感到抱歉。

3 个答案:

答案 0 :(得分:3)

如果您CANNOT将日期存储为日期时间,则可以使用 style 126 ,这会提供ISO8601 formatyyyy-mm-ddThh:mi:ss.mmm (no spaces))。我认为它与文化无关。

<强> Fiddle demo

select convert(nvarchar(50),getdate(),126)

最好的办法是将日期存储为日期时间/日期类型。

答案 1 :(得分:2)

您应该使用DATETIMEDATETIME2数据类型来存储日期和时间值。它们以二进制格式存储在数据库中,并且与文化无关。

您可以在此处阅读有关MSDN的更多信息:http://msdn.microsoft.com/en-us/library/ms187819(v=sql.100).aspx

有关SQL Server如何存储日期时间值的更多信息:“它使用8个字节来存储日期时间值 - 前4个用于日期,第2个用于存储日期时间值。” (来自:http://sqlmag.com/sql-server/solving-datetime-mystery

答案 2 :(得分:0)

我不明白这个想法是在varchar字段中存储日期,以便它是'文化独立'。 dateTime数据类型是独立于文化的。文化依赖的是日期值的显示方式:

MM/dd/YYYY
dd/MM/YYYY
YYYY-MM-DD
etc

但是,如果显示更改,基础值本身仍然相同......这就是为什么您可以轻松地将日期从一种格式转换为另一种格式....

因此,为了简单起见,我强烈建议您切换到与文化无关的日期时间字段。否则,任何进一步使用此字段的内容(计算,显示,打印输出等)将是真正的PITA ......