1

SQL Server 2005 の StartDate フィールドと EndDate フィールドに varchar データ型を使用しています。サンプル クエリは次のとおりです。

*日付は dd/MM/yyyy 形式に従っています。

select * from dbo.SubDetails
where
((
DATEADD(DAY,DATEDIFF(DAY, 0, convert(datetime,StartDate,105)), 0) <= 
DATEADD(DAY,DATEDIFF(DAY, 0, convert(datetime,'16/11/2012',105)), 0)
)
AND 
(
DATEADD(DAY, DATEDIFF(DAY, 0, convert(datetime,EndDate,105)), 0) >= 
DATEADD(DAY, DATEDIFF(DAY, 0, convert(datetime,'11/9/2012',105)), 0)
))

このクエリは、日付範囲間のレコードに関係なく、すべてのレコードを提供しています。どんな助けでも大歓迎です。ありがとう

4

1 に答える 1

1

まず第一に、日付値を varchar 列に格納しないでください。必要な場合は、YYYYMMDDフォーマットを使用してください。2番目 - 日付を比較できます:

select *
from dbo.SubDetails
where
    convert(datetime, StartDate, 105) <= convert(datetime,'16/11/2012', 105) and
    convert(datetime, EndDate, 105) >= convert(datetime,'11/9/2012', 105)

また、クエリは、指定されたデータ範囲 (2012 年 9 月 11 日~2012 年 11 月 16 日) と交差するすべてのデータ範囲を返します。それがあなたのやりたいことですか?

更新:StartDate 2012 年 11 月 9 日から 2012 年 11 月 16 日までのレコードが必要な場合は、これを行うことができます ( <=EndDateと仮定):StartDateEndDate

select *
from dbo.SubDetails
where
    convert(datetime, StartDate, 105) >= convert(datetime,'09/11/2012', 105) and
    convert(datetime, EndDate, 105) <= convert(datetime,'16/11/2012', 105)
于 2012-12-06T07:11:01.993 に答える