SELECT entre dos fechas

Estoy intentando hacer un SELECT que me traiga todos los registros que estén entre dos fechas. Sin embargo, quiero ignorar el tiempo (horas, minutos, segundos, etc...). Por ejemplo, tengo un registro que tiene 2016-11-14 11:47:56.207, pero yo envío por parámetro a mi stored procedure solo 14-11-2016. Si lo envío así, no recibo resultado.

WHERE GRP.GRP_Fecha BETWEEN @desde AND @hasta 
1
задан 15.11.2016, 23:04
3 ответа

В твоем случае, я предлагаю тебе избегания любой soluciГіn того, чтобы он завернул делать [один 112] или другой тип conversiГіn с полем GRP_Fecha. Сделав это, ты не позволяешь Server SQL можения использовать Г-ndice, если это есть для поля GRP_Fecha и это может затрагивать твой результат очень очевидной формы.

И, конечно, between не является идеальным в этом случае especГ-fico по причинам, уже упомянутым в твоем вопросе.

я предлагаю Тебе следующую condiciГіn для лучшего результата (хорошее использование Г-ndices) и чтобы предотвращать проблемы с часами:

where GRP.GRP_Fecha >= @desde
  and GRP.GRP_Fecha < dateadd(day, 1, @hasta) -- @hasta + 1 día

В случае где:

  • @desde = 2016-11-01
  • @hasta = 2016-11-14

... она condiciГіn равняется в:

where GRP.GRP_Fecha >= '2016-11-01'
  and GRP.GRP_Fecha < '2016-11-15' -- esta es la parte clave

, попросив даты, предыдущие 2016-11-15, это включает все даты 2016-11-14 так, что час не имеет значение.

2
ответ дан 24.11.2019, 12:36
  • 1
    Я это применил и я функционирую в совершенство!... как консультация dateadd, что делает главным образом с этими параметрами? Я имею в виду, потому что day? – sioesi 15.11.2016, 22:41
  • 2
    В этом случае, я прошу его, dí добавляет; в в дату @hasta. Так что, если @hasta = 2016-11-14, condició n он превращается в and GRP.GRP_Fecha < '2016-11-15'. – sstan 15.11.2016, 22:43
  • 3
    Чтобы включать часы... совершенно меня не было ocurido! Спасибо @sstan – sioesi 15.11.2016, 22:44

Я resolvГ - проблема с нею funciГіn convert. Для твоего случая serГ - в

WHERE convert(date, GRP.GRP_Fecha) BETWEEN @desde AND @hasta
1
ответ дан 24.11.2019, 12:36
  • 1
    я работаю с sql-server-2005 и он не существует восходите:/ – sioesi 15.11.2016, 17:54

Восток ты будет функционировать, хотя у него будет формат AГ±o / месяц / в день: Hora:Min:Seg

 select * from table where Date >= '2016-10-01' and Date <= '2016-11-01' 
0
ответ дан 24.11.2019, 12:36
  • 1
    Если у реестра есть дата 2016-11-01 11:47:56.207, сходный с примером вопроса, этой консультации, он не будет возвращать ее. – sstan 22.11.2016, 00:43

Теги

Похожие вопросы