SQL Server, где дата между start _date и End_date

#sql #sql-server #sql-server-2005 #tsql

#sql #sql-сервер #sql-server-2005 #tsql

Вопрос:

У меня есть таблица событий, где мне нужно выбирать записи между днями. мои заявления выглядят следующим образом

 Select 
    Event_ID
    ,Event_Type
    ,Event_Time
From 
    Event_Table
Where 
    CONVERT(char(8),Event_Table.Event_time,112) BETWEEN '20110501' AND '20110505'
  

Event_time — это формат DateTime.

Теперь все выглядит нормально, кроме того, что я должен делать, если мне нужно, чтобы оператор запрашивал дату между Date_start и Date_End при любом ее запуске. Идея состоит в том, чтобы запрашивать новую промежуточную дату при каждом запуске scrpt

Комментарии:

1. Какая версия SQL Server?? 2008 представил DATE тип данных, который был бы идеальным для этого сценария.

2. И если вы используете SQL Server 2008 и вам нужна только часть даты (без информации о времени), вы должны использовать DATE вместо DATETIME

3. к сожалению, это SQL Server 2005

4. В transact SQL вообще нет аспекта «пользовательского интерфейса» — если вам нужно запросить дату начала / окончания, вам нужно использовать возможности любого инструмента, из которого вы запускаетесь. Вы указали предпочтение для запуска этого как пакетного файла, но я не думаю, что там также доступно много возможностей.

Ответ №1:

 declare @EndDate datetime 
set @EndDate = getdate()

declare @StartDate datetime
set @StartDate= dateadd(day, -5, @EndDate)

select Event_ID, Event_Type, Event_Time
from Event_Table
where 
    Event_Time >= @StartDate and
    Event_Time < @EndDate
  

если вам нужно включить @EndDate, то

 select Event_ID, Event_Type, Event_Time
from Event_Table
where 
    Event_Time >= @StartDate and
    Event_Time < dateadd(day, 1, @EndDate)
  

Комментарии:

1. мой вопрос в том, как заставить скрипт всплывать и запрашивать дату при каждом его выполнении. Дата должна отличаться при каждом ее выполнении. Предполагается запустить скрипт с помощью пакетного файла.

2. @Faisal — вам нужно периодически запускать запрос автоматически? Если это автоматически, в течение какого периода оно должно выполняться, на прошлой неделе, в последний день?

3. @Faisal — Я обновил ответ примером того, как запускать запрос за последние 5 дней.

4. получена эта ошибка «Сообщение 139, уровень 15, состояние 1, строка 0 Не может присвоить значение по умолчанию локальной переменной. Сообщение 139, уровень 15, состояние 1, строка 0 Не может присвоить значение по умолчанию локальной переменной. Сообщение 137, уровень 15, состояние 2, строка 46 Должно объявлять скалярную переменную «@Start_Date».»

5. @Faisal — в 2005 году сделайте declare @EndDate datetime; declare @StartDate datetime; set @EndDate = getdate(); set @StartDate = dateadd(day,-5,@EndDate); .