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番目の質問ですが、過去2週間までに通知を除外したいと思います。とにかく、mssqlでこれを動的に実行できますか?ご協力いただきありがとうございます。

4

4 に答える 4

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を組み合わせることはできません。Notices.CDateでBetweenを使用する必要があると思います。これは、それが唯一の日付フィールドのようだからです。

過去2週間の価値を取得したい場合は、最後の行が次のように変更されます。

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

クエリで時間が重要な場合は、GETDATE()から時間を取り除くために何かをしたいと思うかもしれません。この質問にはいくつかの良い答えがあるようです。

SQLServerの日時データ型からのみ日付部分を返す方法

于 2012-04-06T14:53:40.350 に答える
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

過去2週間(過去14暦日を意味します)

AND Notices.CDate BETWEEN DATEADD(d,-14,GETDATE()) AND GETDATE()
于 2012-04-06T14:54:11.910 に答える
2

ANDが欠けていると思います。これを試してください

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'
于 2012-04-06T14:57:54.920 に答える
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'
于 2012-04-06T14:55:37.660 に答える