2017-01-22 5 views
0

Я работаю над веб-сайтом в asp.net. Я получаю дату с веб-страницы, а затем, в зависимости от ввода пользователя, я хочу получить результаты из базы данных SQL Server (используя хранимые процедуры).Дата обработки в SQL Server

Проблема в том, что я получаю дату только от пользовательского интерфейса в этом формате 2016-10-08, который имеет тип string. Но в базе данных у меня есть столбец, который имеет тип datetime в этом формате 2016-10-08 17:38:00.000.

Я использую этот запрос для поиска, но он не работает.

select * 
from table 
where acceptedDate like @sDate+ '%'; 

где sDate является входным параметром для хранимой процедуры. Пожалуйста помоги. спасибо

+0

выберите * из таблицы , где обращенная (дата, acceptedDate)> = @sDate –

ответ

3

Не передавайте даты как строки. Передайте их как DateTime.
. NET DateTimemaps directly для SQL Server DateTime. Все, что вам нужно сделать, - проанализировать строку в структуре DateTime в вашем. Net-коде и передать ее в качестве параметра вашей хранимой процедуры. Для поиска конкретной даты и игнорировать часть времени в DateTime, лучше использовать >= и < в вашем SQL:

select * 
from table 
where acceptedDate >= @Date 
AND acceptedDate < DATEADD(DAY, 1, @Date); 
+0

на самом деле проблема в том, я не могу найти для разбора ввода значение в дату и время. Я использую input type = date для выбора даты из календаря. –

+0

Я пробовал это, но doesnot work Строка startDate = DateTime.Parse (txtstartDate.Value) –

+0

'String startDate = DateTime.Parse (txtstartDate.Value)' не должно работать, возможно, 'DateTime startDate = DateTime.Parse (txtstartDate.Value)' , Я бы предложил использовать 'TryParseExact' вместо' Parse', чтобы 1. вы могли управлять допустимыми форматами, и 2 вы не получите исключение, если строка не может быть проанализирована. –

0

Если вы хотите только сравнить с уровнем дня и не обращая внимания на часы часть, вы можете использовать DATEDIFF функция. проход д или ДЕНЬ интервал параметра DateDiff

Например:

DECLARE @sDate VARCHAR(100)='2016-10-08' 
IF ISDATE(@sDate)=1 
BEGIN 
    select * 
    from table 
    where datediff(d,acceptedDate,@sDate)=0 --same day 
END 
ELSE 
PRINT 'Invalid date format!' 
Смежные вопросы