2013-09-27 48 views
0

我目前有一個挑戰,即在NVarChar字段中存儲日期時間值,以使其與文化無關。將日期時間作爲文化獨立存儲在SQL Server 2008中

我讀過,你可以使用CONVERT(int, GETDATE(), 112)將值轉換爲int,這應該使它獨立於文化,但前面的語句不存儲時間。

將文本獨立存儲爲DateTime的行業標準是什麼?

  • 編輯

請注意,我不能在我的場景中使用日期時間。它必須是NVarChar。

  • EDIT 2

好了,找到了答案,以我自己的問題。

要轉換的日期時間到它的二進制(8)原始格式: 轉換(二進制(8),GETDATE())

我則該值存儲在一個VARCHAR字段如下: CONVERT(VARCHAR( MAX),轉換(二進制(8),GETDATE()),2)

要檢索其從varchar字段後面,並將其轉換爲DateTime: CONVERT(日期時間,CONVERT(二進制(8),[TextField的] ,2))

就像我擔心的那樣,這會將DateTime存儲爲獨立的文化。

  • 編輯3

好像用戶卡夫擁有最佳的解決方案。我寧願使用格式126將其轉換爲文本,然後從文本返回到DateTime。

謝謝大家,併爲此感到抱歉。

+0

可能重複的[如何使DateTime獨立於當前的文化?](http:// stackoverflow .com/questions/5893937/how-to-make-datetime-independant-from-the-current-culture) –

+0

我已經看過了可能的重複,但那個指的是C#。我正在問具體關於SQL Server。 – user2418900

+0

存儲爲任務的適當數據類型 - 「datetime」。只有在將數據呈現給用戶時,文化才應發揮作用。使用不適當的數據類型會給你無數的編程,格式和性能問題。 – alroc

回答

2

您應該使用DATETIMEDATETIME2數據類型來存儲日期和時間值。它們以二進制格式存儲在數據庫中,並且與文化無關。

你可以閱讀更多的MSDN這裏:http://msdn.microsoft.com/en-us/library/ms187819(v=sql.100).aspx

更多關於如何SQL Server存儲datetime值:它」用8個字節來存儲日期時間價值的對日第4和對第二個4時間。」 (來源:http://sqlmag.com/sql-server/solving-datetime-mystery

+0

感謝您的建議。我同意你的看法,但在目前的場景中,我需要將DateTime存儲爲NVarChar字段,而不是DateTime。這是一個很長的故事:) – user2418900

+0

如果它是爲了你自己的目的,你甚至可以去一個自定義的格式。 – Szymon

+0

我真的不想走下創建自定義格式的路線。我只是想知道在應用任何文化之前是否存在一個存儲DateTime的「原始」類型格式。 – user2418900

3

如果CANNOT店日期,日期時間,你可以使用style 126這給ISO8601 formatyyyy-mm-ddThh:mi:ss.mmm (no spaces))。我認爲這是文化獨立。

Fiddle demo

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

最好的事情是存儲數據截至日期時間/日期類型。

0

我不明白這個想法在varchar字段中存儲日期,以便它是'文化獨立'。 dateTime數據類型是文化獨立的。什麼是文化相關的顯示日期值的方式:

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

但是,如果顯示的變化,潛在價值本身仍然是相同的...這就是爲什麼你可以很容易地從一個「轉換」日期格式到另一個....

所以,爲了簡單起見,我強烈建議您切換到文化獨立的日期時間字段。否則任何進一步使用此字段的內容(計算,顯示,打印等)將是一個真正的PITA ...

相關問題