2012-04-06 5 views
0
SELECT TOP 5 Notices.Id, NoticeL.Notices_Id, Loc.Id as Location_Id, 
CAST(Notices.Text AS TEXT) as Text, CAST(Notices.Title AS TEXT) as Title, 
Notices.CDate as RegDate 

FROM NoticeL JOIN Notices ON NoticeL.Notices_Id=Notices.Id 
JOIN Loc ON NoticeL.Loc_Id=Loc.Id 
WHERE Loc_Id IN (1) BETWEEN '06/04/2012' AND '23/04/2012' 

Я пытаюсь использовать между следующими IN, но мне не повезло. Я получаю следующую синтаксическую ошибку:Использование в и между

Msg 156, Level 15, State 1, Line 1 
    Incorrect syntax near the keyword 'BETWEEN'. 

Я предполагаю, что MsSql не нравится синтаксис. Как я могу это сделать?

Второй вопрос, я хотел бы отфильтровать уведомления за последние 2 недели. В любом случае я могу сделать это динамически в mssql. Спасибо за вашу помощь.

+1

Вы хотите, чтобы тест в той же колонке? вы не использовали это как другое условие .. может быть, это что-то вроде ... Loc_Id IN (1) AND Loc_Id BETWEEN' ... – mishu

+1

А, да, я хочу использовать его в столбце Notices.CDate – bobo2000

+0

, который вам не хватает И, между IN и Between :) – Habib

ответ

2
SELECT TOP 5 Notices.Id, 
       NoticeL.Notices_Id, 
       Loc.Id as Location_Id, 
       CAST(Notices.Text AS TEXT) as Text, 
       CAST(Notices.Title AS TEXT) as Title, 
       Notices.CDate as RegDate 
FROM NoticeL 
JOIN Notices ON NoticeL.Notices_Id=Notices.Id JOIN Loc ON NoticeL.Loc_Id=Loc.Id 
WHERE Loc_Id IN (1) 
AND Notices.CDate BETWEEN '06/04/2012' AND '23/04/2012' 

Вы не можете комбинировать IN и BETWEEN в одном и том же поле. Я предполагаю, что Inter необходимо использовать в Notices.CDate, поскольку это кажется единственным полем даты.

Если вы хотите, чтобы захватить последние две недели стоят, то последняя строка меняется

AND Notices.CDate BETWEEN GETDATE() - 14 AND GETDATE() 

Если вопросы времени в вашем запросе, то вы можете сделать что-то, чтобы лишить свободное время из GETDATE(). На этот вопрос, похоже, есть хорошие ответы.

How to return the date part only from a SQL Server datetime datatype

2
NoticeL.Loc_Id=Loc.Id WHERE Loc_Id = 1 -- IN (1) should work too 
             -- if you're building the query 
             -- dynamically as a string and want 
             -- to use IN with a list of IDs 
AND Notices.CDate BETWEEN '06/04/2012' AND '23/04/2012 

в течение последних двух недель (то есть за последние 14 календарных дней), вы могли бы сделать

AND Notices.CDate BETWEEN DATEADD(d,-14,GETDATE()) AND GETDATE() 
0

Попробуйте один

SELECT TOP 5 Notices.Id, NoticeL.Notices_Id, Loc.Id as Location_Id, 
CAST(Notices.Text AS TEXT) as Text, CAST(Notices.Title AS TEXT) as Title, 
Notices.CDate as RegDate 

FROM NoticeL JOIN Notices ON NoticeL.Notices_Id=Notices.Id 
JOIN Loc ON NoticeL.Loc_Id=Loc.Id 
WHERE Loc_Id IN (1) HAVING RegDate BETWEEN '06/04/2012' AND '23/04/2012' 
2

Я думаю, что вам не хватает И, попробуйте это

FROM NoticeL JOIN Notices ON NoticeL.Notices_Id=Notices.Id 
JOIN Loc ON NoticeL.Loc_Id=Loc.Id 
WHERE Loc_Id IN (1) AND BETWEEN '06/04/2012' AND '23/04/2012' 
+1

... и имя столбца тоже, да? –

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