我想根據我的$ data輸入動態搜索數據庫中的日期。DATETIME vs LIKE進行動態搜索SQL
日期存儲爲日期時間,通常顯示爲例如「2016-05-11」。
隨着MySQL數據庫我的條款是:
Select * From Table WHERE (Table.date LIKE '$data%')
因此,如果用戶輸入「20」的結果將是與20開始。如果用戶輸入「2016-05」的結果將所有日期是所有以2016-05開始的日期,使我的搜索完美工作。
在Sql Server 2008上部署時,我意識到了兩件事。
1)如果我使用LIKE功能這樣的
Select * From Table WHERE (Table.date LIKE '%$data$%')
的功能爲「2016」的值工作,而是進入了一個值「2016-」時會返回0的結果。
2)如果我使用的功能DATETIME這樣
Select * From Table WHERE (DATEPART(year, Table.date) LIKE(OR)= '$data')
該函數將返回正確的值時,$數據= 2016,但將返回nil值時$數據=「201」,例如,因此使其不具動態性。
我在做什麼錯了?
的問題在於輸入驗證。如果用戶可以輸入'20',他們也可以輸入''fred'或'2016-02-30'。 –
我使用ajax調用,所以如果他們進入弗雷德。他們不會得到結果。那不是問題?我不是嗎? – MakDo