0

我目前面临将 DateTime 值存储在 NVarChar 字段中以使其与文化无关的挑战。

我读过您可以通过使用将值转换为 intCONVERT(int, GETDATE(), 112)应该使其与文化无关,但前一条语句不存储时间。

将 DateTime 存储为与文化无关的行业标准是什么?

  • 编辑

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

  • 编辑 2

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

要将 DateTime 转换为它的 binary(8) 原始格式: convert(binary(8), GETDATE())

然后我将值存储在 VARCHAR 字段中,如下所示:CONVERT(VARCHAR(MAX), convert(binary(8), GETDATE()), 2)

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

就我而言,这会将 DateTime 存储为独立于文化的。

  • 编辑 3

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

谢谢大家,很抱歉造成混乱。

4

3 回答 3

3

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

小提琴演示

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

最好的办法是将 Date 存储为 DateTime/Date 类型。

于 2013-09-27T12:04:43.107 回答
2

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

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

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

于 2013-09-27T11:17:09.997 回答
0

我没有想到将日期存储在 varchar 字段中,以便它是“文化独立的”。dateTime 数据类型与文化无关。取决于文化的是日期值的显示方式:

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

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

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

于 2013-09-27T12:36:27.087 回答