2012-09-04 86 views

回答

16
SET DATEFORMAT MDY; 
SELECT CASE WHEN ISDATE(@string) = 1 
    AND @string LIKE '[0-1][0-9]/[0-3][0-9]/[1-2][0-9][0-9][0-9]' 
    THEN 1 ELSE 0 END; 

如果結果是1,這是一個有效的日期,但不能保證它是用戶的意思。如果他們進入:

06/07/2012 

有沒有辦法知道他們是否意味着6月7日或7月6日最好的辦法是讓用戶挑選日期從下拉列表或日曆控件,它允許您控制格式並避免任何不必要的解釋。您的應用程序層可以使用強類型變量/參數並插入正確類型的列。

+2

+1 - 應該注意的是,這當然暗示日期/時間應該**作爲字符串類型存儲,但是作爲它們的適當類型。如果你想弄清楚數據庫正在使用什麼......你可能會遇到一些麻煩。 –

+0

@ X-Zero謝謝,並在上面添加了一個明確的聲明。 –

3

如果你的SQL服務器的日期格式之後,看它是否是MDY然後使用:

dbcc useroptions 

而且具有看看日期格式設置選項

+0

+1 - 你知道如何改變它嗎? –

0

你必須這樣做外部數據庫。數據庫以自己的格式在內部存儲datetime。我不認爲你可以閱讀日期存儲的格式。你可以閱讀它你喜歡的任何方式,例如dd/mm/yyyy或yyyy/mm/dd等。

你可以做的是檢查這個任何日期字段的數據庫外的值。你可以使用正則表達式。但那將在數據庫之外。

2

您轉換日期爲這種格式datestring使用CONVERT function

select convert(varchar(10),getdate(),101) 

MM/DD/YYYY輸出將是爲9月8日的2012

09/08/2012 

無需驗證,其他然後檢查日期字段是否爲空