2010-07-23 16 views
0

我需要從我的代碼(VB.NET)檢查表中特定的DateTime值,並且我不知道如何將DateTime格式化爲字符串。我讀過SQL Server會識別我的字符串,如果它是日期,時間或日期和時間格式。我的意思是:SQL:如何檢查特定的DateTime

'May 15, 2004' 
'5/15/2004' 
'20040515' 
'2004 4 am' 

SQL Server會將這些字符串識別爲有效的DateTime值嗎?我很好奇,因爲如果我檢查實際的日期時間值,他們都是這種格式的表格:

2/2/2006 3:49:33 PM 

回答

5

不要把日期/時間值在首位的SQL查詢 - 使用參數化查詢然後您不需要知道或關心SQL Server將解析文字爲什麼格式。將佔位符置於SQL中,並在參數集合中將值指定爲DateTime

你應該使用參數化SQL,事實上 - 它不僅可以擺脫格式和解析這樣的問題,而且可能更重要的是它是防止SQL注入攻擊的最有效的武器。

+0

我很確定我修改的這段代碼是使用參數化的SQL。我想將DateTime值硬編碼爲一個字符串,僅用於測試目的。 – 2010-07-23 21:08:48

+1

@ 400_the_cat爲什麼?爲什麼不引入另一個參數?爲此,我沒有看到引入問題的觀點。 – 2010-07-24 05:57:03

+0

也許我不明白你的答案。你能發佈或鏈接到使用參數化查詢的例子嗎? – 2010-07-24 08:06:27

2

如果不使用參數化查詢,使用CAST/CONVERT爲字符串明確更改爲DATETIME:

SELECT CAST('2/2/2006 3:49:33 PM' AS DATETIME) 

在我的SQL Server 2005中,返回給我:

2006-02-02 15:49:33.000 

記住, SQL Server中的默認日期格式可能與您提供的不同。

1

這一直是安全的,我發現: YYYY-MM-DD HH:MI:SS

1

如果你比較日期時間爲日期時間,你不必擔心轉換,necessarilly,但是,是的,Sql Server(至少從2k8開始,我也相信2k5)會自動從字符串中解析DateTime。也就是說,如果你通過'5/15/2004'它會看到5/15/2004 12:00:00 AM或類似的東西。

但是,更好的方法是在代碼中的SqlCommand中使用SqlParameters。