2016-07-22 56 views
0

我試圖將日期時間值傳遞給存儲的proc查詢,在該查詢中對照也是日期時間字段的列進行檢查。Sybase(ASE)DATETIME字段中的where子句完全匹配

比方說一個例子,我有其中有一個表:

ProductID int 
ProductName varchar(20) 
InsertDate DateTime 

現在,我寫了一個存儲過程:

Create proc usp_GetProductsByInsertDate 
@input_insertDate datetime 
as 
select * from Products where InsertDate = @input_insertDate 

現在,如果我通過@input_insertDate = '07/01/2016 06:25:15 PM',它應該帶給我的當時插入的產品清單,但沒有發生。我可能不得不像下面這樣返回結果:

select * from Products where InsertDate >= @input_insertDate 

我想在「claue」字段中使用「date和time」。我可以使用它嗎?這可能是一個愚蠢的問題,但我想知道爲什麼它不起作用。請讓我知道如何。

回答

0

您可以檢查目標列InsertDate中的值是否在您的預期匹配行中具有毫秒(> 0)。某些數據庫IDE在默認設置下會隱藏毫秒(您的@input_insertDate不會有毫秒),這可能會導致混淆。您的查詢對我來說看起來不錯,您可以對預期的行執行datepart(ms, InsertDate)查看。

+0

不,我不這樣,所以它與datepart有關,並且在我的目標列中沒有毫秒毫秒 – superachu

+0

您可以發佈一些數據,您期望使用datepart獲取毫秒值嗎? – Neeraj

0

我相信問題是在查詢或參數中傳遞日期作爲字符串,而EXEC存儲過程。看起來它不像一個精確的日期時間匹配的字符串值。當日期對象在過程內部傳遞時,它匹配並返回結果,也就是說,如果我們爲具有「datetime」的字段查詢表,將其分配給一個變量並將該變量傳遞給下一個查詢以進行完全匹配,那麼它的工作。這不是很奇怪嗎?