2013-04-29 2 views
1
Store PROCEDURE 

--para-- 
    @StartingDate DateTime = NULL, 
    @EndingDate  DateTime = NULL 

--condition -- 

    dbo.callentry.CallDateTime BETWEEN ISNULL(@StartingDate, 
dbo.callentry.CallDateTime) and ISNULL(@EndingDate,dbo.callentry.CallDateTime) 

Вопрос:преобразование даты начала в DATETIME в начале дня и дата окончания до конца дня

, когда я прохожу дату '2012-09-17' от выбора даты в пункте @StartingDate, и такой же, как дата окончания. это сравнение 2012-09-17 00:00:00.000 to 2012-09-17 00:00:00.000 - не будет возвращать никаких записей

то, что я хочу, это запись в целый день 2012-09-17

+0

Используйте полную Дату ** Время ** - то есть, «2012-09-17 00: 00: 00' и« 2012-09-17 23: 59: 59 ». – Tim

ответ

0

Попробуйте это:

dbo.callentry.CallDateTime >=ISNULL(@StartingDate, 
dbo.callentry.CallDateTime) and dbo.callentry.CallDateTime <=ISNULL(@EndingDate,dbo.callentry.CallDateTime) 

Кроме того, убедитесь dbo.callentry.CallDateTime этот столбец тип данных также DateTime

ИЛИ

также чтение из вашего вопроса. Я думаю, что когда strt и дата окончания совпадают, вам просто нужны все записи за этот день. если начало и конец такого же, почему не можешь просто использовать, как показано ниже:

convert(date,dbo.callentry.CallDateTime) =convert(date,ISNULL(@StartingDate, 
    dbo.callentry.CallDateTime)) 

В случае SQL Server 2008, если ниже просто преобразовать обе стороны только формат дата annd сравнить

+0

"конвертировать оба стороны только формат даты annd сравнить "- работал! благодаря ! –

1

Почему бы просто не использовать @StartingDate-1 тогда?

Или даже DATEADD(d,-1,@StartingDate)

Или @EndDate + 1

Или даже DATEADD(d,1,@EndDate)

DATEADD (Transact-SQL)

Возвращает указанную дату с указанным номером интервала (подписано целое) добавляют к указанному DATEPART этой даты.

+1

в этом случае не вернут данные за 2 дня? – AnandPhadke

+0

Он не вернет данные за 2 дня; он будет возвращать данные за полный день плюс любые записи с датой дня и полуночи. Чтобы игнорировать их, вы могли бы реструктурировать использование двух отдельных предложений WHERE вместо BETWEEN: 'AND dbo.callentry.CallDateTime <= ISNULL (DATEADD (d, 1, @ EndDate), dbo.callentry.CallDateTime)' –

Смежные вопросы