目前,我面临的挑战是在一个DateTime字段中存储一个NVarChar值,以便它与文化无关。
我已经读过,您可以通过使用CONVERT(int, GETDATE(), 112)
将值转换为int,这应该使其与区域性无关,但前一条语句不会存储时间。
将DateTime存储为独立于文化的行业标准是什么?
请注意,我不能在我的场景中使用DateTime。一定是NVarChar。
好吧,找到了我自己问题的答案。
要将DateTime转换为它的二进制(8)原始格式:转换(二进制(8),GETDATE())
然后,我将该值存储在一个VARCHAR字段中,如下所示:转换(VARCHAR(最大),转换(二进制(8),GETDATE()),2)
要从varchar字段中检索它并将其转换为DateTime: DateTime(DateTime)、convert (二进制(8)、TextField ( 2))
正如我所关注的那样,这将存储一个独立于文化的DateTime。
看来用户Kaf有最好的解决方案。我宁愿使用格式126将其转换为文本,然后从文本返回到DateTime。
谢谢大家,很抱歉给大家带来了混乱。
发布于 2013-09-27 12:04:43
如果CANNOT
将日期存储为Datetime,则可以使用style 126
,这会给出ISO8601 format
(yyyy-mm-ddThh:mi:ss.mmm (no spaces)
)。我认为文化是独立的。
小提琴演示
select convert(nvarchar(50),getdate(),126)
最好是将日期存储为日期时间/日期类型。
发布于 2013-09-27 11:17:09
您应该使用DATETIME
或DATETIME2
数据类型来存储日期和时间值。它们以二进制格式存储在数据库中,并且与区域性无关。
您可以在这里阅读有关MSDN的更多信息:http://msdn.microsoft.com/en-us/library/ms187819(v=sql.100).aspx
关于Server如何存储日期时间值的更多信息:“它使用8个字节存储日期时间值--前4个用于日期,第二个4个用于时间。”(出发地:http://sqlmag.com/sql-server/solving-datetime-mystery)
发布于 2013-09-27 12:36:27
我不想把一个日期存储在varchar字段中,这样它就可以成为“文化独立者”。dateTime数据类型与文化无关。与文化有关的是日期值的显示方式:
MM/dd/YYYY
dd/MM/YYYY
YYYY-MM-DD
etc
但是,如果显示发生变化,则基础值本身仍然是相同的.这就是为什么你可以轻松地将日期从一种格式“转换”到另一种格式.
因此,为了简单起见,我强烈建议您切换到一个与文化无关的日期时间字段。否则,任何进一步使用该字段的内容(计算,显示,打印等)将是一个真正的皮塔。
https://stackoverflow.com/questions/19049339
复制相似问题