2013-03-28 93 views
0

我根據日期時間格式創建了一個日期。但是,我將它作爲字符串/ nvarchar存儲在我的數據庫中,而不是日期時間。我能比較這些日期嗎?這是一種不好的做法嗎?SQL Server - 將比較日期或日期時間存儲爲字符串或nvarchar?

我使用nvarchar來存儲截至目前的日期時間。

+1

像其他人說的那樣,如果消費代碼爲您的日期寫出不同的格式,您仍然可以進行投射/轉換和比較,這可能會很危險。雖然您可以控制可以輸入的格式,但我們所有人都忘記了我們編寫的代碼。所以你可能會在不久的將來採用不同的格式,一切都會變得很糟糕。 – 2013-03-28 04:03:45

回答

2

是的,你仍然可以比較它們,但這肯定是一種不好的做法,因爲你需要將這些字符串轉換爲日期數據類型以便能夠在它們之間進行比較。如果在列上定義了索引,那麼它們將不再使用,因爲該列將被轉換,並且會導致大型數據庫的性能下降。

一個例子在比較日期是這樣的:

SELECT * 
FROM tableName 
WHERE CONVERT(DATETIME, dateSTRColumn, XXX) > GETDATE() 

其中XXX是存儲爲字符串的時間的當前格式。

+0

*後續問題:表中存儲日期的格式是什麼?* – 2013-03-28 03:34:07

+0

jw - nvarchar是格式。 – 2013-03-28 03:36:35

+0

不,這不是我的意思。是「mm/dd/yyyy」,「yyyy/mm/dd」?或者是什麼? – 2013-03-28 03:37:33

1

您將不得不使用cast or convert從字符串解析日期時間或直接比較原始字符串。後者可能取決於字符串存儲的格式。例如,如果日期以「YYYYMMDD」格式存儲,則可以簡單比較string1 < string2。

相關問題