SQL-запрос - проверьте, не закрыта ли дата - PullRequest
1 голос
/ 16 декабря 2010

Я создаю систему онлайн-бронирования и мне нужно исключить закрытые дни из бронирования и мне нужен запрос на выборку, чтобы узнать, является ли "дата" (Рождество)> = [ClosedFrom] И <= [ClosedTo] </p>

И ClosedFrom, и ClosedTo - это столбцы даты и времени в SQL Server 2008.

Вот как выглядит мой стол:

 ----------------------------------------------------------
 ClosedDateID     --     ClosedFrom     --     ClosedTo
 ----------------------------------------------------------
 1                --     2010-12-24     --     2010-01-04
 2                --     2011-04-20     --     2010-04-20
 ----------------------------------------------------------

Надеемся, что приведенный ниже запрос покажет вам, чего я пытаюсь достичь:

 SELECT [ClosedFrom],[ClosedTo]
 FROM [Package.Closed.Dates]
 where '2010-12-25' >=  [ClosedFrom] AND '2010-12-25' <= [ClosedTo] 

Заранее спасибо за помощь;)


UPDATE:

Спасибо Refilter за ваш ответ, но я все еще не могу заставить его работать :( У меня есть некоторые подробности ниже.

Вот мой настольный скрипт:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Package.Closed.Dates](
    [ClosedDateID] [int] IDENTITY(1,1) NOT NULL,
    [ClosedDate] [datetime] NULL,
    [ClosedFrom] [datetime] NULL,
    [ClosedTo] [datetime] NULL,
 CONSTRAINT [PK_Package.Closed.Dates] PRIMARY KEY CLUSTERED 
(
    [ClosedDateID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

Вот мои данные таблицы:

INSERT INTO [dbo].[Package.Closed.Dates]
           ([ClosedDate]
           ,[ClosedFrom]
           ,[ClosedTo])
     VALUES
           ('2010-12-25'
           ,'2010-12-20'
           ,'2010-12-28'
GO

Вот мой запрос, который проверяет одну дату (ClosedDate), чтобы увидеть, закрыты ли мы (ЭТО ВОЗВРАЩАЕТСЯ «В тот день мы ЗАКРЫТЫ» - РАБОТАЕТ):

if exists (

SELECT [ClosedDate]
  FROM [Package.Closed.Dates]
  where [ClosedDate] =  '2010-12-25'

)

select 'we are CLOSED that day'

else 

select 'we are OPEN that day'

Вот ваш запрос к этой проверке между двумя датами (ClosedFrom & ClosedTo), чтобы увидеть, закрыты ли мы (ЭТО ВСЕГДА ВОЗВРАЩАЕТСЯ «МЫ ОТКРЫТЫ в тот день» - НЕ РАБОТАЕТ):

if exists (

SELECT [ClosedFrom],[ClosedTo] 
  FROM [Package.Closed.Dates]
where '2010-12-25' between [ClosedFrom] AND [ClosedTo]  

)

select 'we are CLOSED that day'

else 

select 'we are OPEN that day'

Я также попробовал следующий запрос (ЭТО ВСЕГДА ВОЗВРАЩАЕТСЯ «В тот день мы открыты» - НЕ РАБОТАЕТ):

<code>
if exists (
SELECT [ClosedFrom],[ClosedTo] 
  FROM [MWD.Package.Closed.Dates]
where '2010-12-25' >= [ClosedFrom] AND '2010-12-25' <= [ClosedTo]<br>
)
select 'we are CLOSED that day'
else 
select 'we are OPEN that day'

Еще одна быстрая заметка, мне нужно посмотреть, является ли «дата» (Рождество)> = [ClosedFrom] И <= [ClosedTo] </p>

Ответы [ 2 ]

3 голосов
/ 16 декабря 2010
SELECT [ClosedFrom], [ClosedTo]  
FROM [Package.Closed.Dates]  
where '2010-12-25' between [ClosedFrom] AND [ClosedTo]  
0 голосов
/ 17 декабря 2010

Это может сработать для вас.Это удаляет компонент времени и делает его 00

DECLARE @DateToCheck DATETIME
SET @DateToCheck = '2010-12-25'    

IF EXISTS ( SELECT 1   
            FROM [Package.Closed.Dates]   
            WHERE CONVERT(DATETIME,@DateToCheck,112) BETWEEN CONVERT(DATETIME, 
                  [ClosedFrom],112) AND CONVERT(DATETIME,[ClosedTo] ,112)
          )
   SELECT 'we are CLOSED that day'    
ELSE     
   SELECT 'we are OPEN that day'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...