2016-07-22 7 views
0

Я пытаюсь передать значение datetime в хранимый запрос proc, где он проверяется на столбец, который также является полем datetime.Поле базы данных 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 поле. Могу ли я использовать это? Это может быть глупый вопрос, но я хотел бы знать, почему он не работает. Пожалуйста, дайте мне знать, как это сделать.

ответ

0

Можете ли вы проверить, соответствуют ли значения в целевом столбце InsertDate миллисекундами (> 0) для ожидаемых совпадающих строк. Некоторые IDE базы данных по умолчанию скрывают миллисекунды (ваш @input_insertDate не имеет миллисекунды), что может вызвать такую ​​путаницу. Ваш запрос выглядит хорошо для меня, вы можете сделать datepart(ms, InsertDate) на ваших ожидаемых строках для проверки.

+0

нет, я не знаю, так оно связано с датой, и в моей целевой колонке нет миллисекунды – superachu

+0

Можете ли вы опубликовать некоторые данные, которые вы ожидаете с помощью datepart для миллисекундных значений? – Neeraj

0

Я считаю, что проблема связана с передачей даты в виде строки в запросе или параметре, в то время как EXEC хранит proc. Похоже, это не похоже на строковое значение для точного совпадения даты и времени. Когда объект даты передается внутри процедуры, он соответствует и возвращает результат, т. Е. Если мы запрашиваем таблицу для поля, имеющего «datetime», присваиваем это переменной и передаем эту переменную следующему запросу для точного соответствия , то это работает. Разве это не странно?