SQL Server で次のクエリを作成しました。
SELECT *
FROM AttendanceMaster
WHERE Date between '8/12/2012' AND '8/20/2012'
butt クエリ結果が「2012 年 8 月 13 日」と「2012 年 8 月 19 日」を返す
ただし、2012 年 12 月 8 日の日付と 2012 年 8 月 20 日の日付の結果は返されません。
上記の2つの日付のデータを取得する解決策は何ですか?
SQL Server で次のクエリを作成しました。
SELECT *
FROM AttendanceMaster
WHERE Date between '8/12/2012' AND '8/20/2012'
butt クエリ結果が「2012 年 8 月 13 日」と「2012 年 8 月 19 日」を返す
ただし、2012 年 12 月 8 日の日付と 2012 年 8 月 20 日の日付の結果は返されません。
上記の2つの日付のデータを取得する解決策は何ですか?
次のクエリを試してください。
SELECT *
FROM AttendanceMaster
WHERE CAST(Date AS DATETIME)
BETWEEN DATEADD(DAY , -1 ,CAST('2012-08-12' AS DATETIME)) AND
DATEADD( DAY , 1 ,CAST('2012-08-20' AS DATETIME));
SQL Server 2008を使用している場合は、次のような操作を行うだけで済みます。
SELECT *
FROM AttendanceMaster
WHERE CONVERT(DATE, [Date]) BETWEEN CAST('2012-08-12' AS DATE) AND CAST('2012-08-20' AS DATE)
編集:私はここで2つの仮定をしています。
1)[日付]が2012年8月12日および/または20日に等しいデータがAttendanceMasterテーブルにあることを実際に確認したこと-そもそもそこにないものを探したくない;)
2)[日付]列はおそらくDATETIMESQLServerタイプである
そのTO
代わりにAND
select *
from AttendanceMaster
where Date between '8/12/2012' AND '8/20/2012'
日付にキャストしてみてください
SELECT *
FROM AttendanceMaster
WHERE CAST([Date] AS DATE) BETWEEN CAST('2012-08-12' AS DATE) AND CAST('2012-08-20' AS DATE)
日付を指定する'2012-08-12'
と、と'2012-08-20'
の間のデータが返されるため、日付からの値は返されません。したがって、目標日を次のように記述する必要があります'2012-08-12 0:00 AM'
'2012-08-20 0:00 AM'
'2012-08-12'
'2012-08-21'
'2012-08-20'
exの変数に日付がある場合:
DECLARE @FromDate DATETIME
DECLARE @ToDate DATETIME
SET @FromDate = '2012-08-12'
SET @ToDate = '2012-08-20'
DECLARE @NextDate DATETIME
SET @NextDate=CAST(FLOOR(CAST(dateadd(day,1,@ToDate) AS FLOAT)) AS DATETIME)
/*This Returns the Next Day Date.*/
SELECT *
FROM AttendanceMaster
WHERE Date between @Date AND @NextDate
または、次のように書くことができます
DECLARE @FromDate DATETIME
DECLARE @ToDate DATETIME
SET @FromDate = '2012-08-12'
SET @ToDate = '2012-08-20'
SELECT *
FROM AttendanceMaster
WHERE Date between @Date AND CAST(FLOOR(CAST(dateadd(day,1,@ToDate) AS FLOAT)) AS DATETIME)
<, <=, >=, or >
BETWEEN よりも柔軟性が高く、エンドポイントを含めるか除外するかを選択できるため、使用することをお勧めします。したがって、クエリを次のように書き直すことができます
SELECT *
FROM AttendanceMaster
WHERE Date > '8/12/2012 00:00:00' AND Date < '8/21/2012 00:00:00'
上記のクエリでは、終了日が 20 日ではなく 21 日であることに注意してください。
また、デフォルトでは、SQL Server は '8/20/2012' AS '8/20/2012 00:00:00' のような日付を取るため、BETWEEN または正確なタイムスタンプを指定しないでください。
それが役に立てば幸い。