0

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つの日付のデータを取得する解決策は何ですか?

4

5 に答える 5

1

次のクエリを試してください。

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));
于 2012-10-02T05:23:56.203 に答える
0

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タイプである

于 2012-10-02T05:29:09.140 に答える
0

その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-10-02T05:08:56.147 に答える
0

日付を指定する'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)
于 2012-10-02T05:35:13.477 に答える
0

<, <=, >=, 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 または正確なタイムスタンプを指定しないでください。
それが役に立てば幸い。

于 2012-10-02T05:36:49.560 に答える