#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);
.