2回の間のアクセス時間を取得しようとしています。
例
accesstime starttime endtime
23:00 22:00 00:00:00
私のクエリは次のようになります
select accesstime
from myTable
where accesstime between '22:00:00'and '00:00:00'
クエリを実行しても結果が得られない
なんで?
2回の間のアクセス時間を取得しようとしています。
例
accesstime starttime endtime
23:00 22:00 00:00:00
私のクエリは次のようになります
select accesstime
from myTable
where accesstime between '22:00:00'and '00:00:00'
クエリを実行しても結果が得られない
なんで?
時間は から00:00:00
まで23:59:59
だから、同じ日22:00
よりも大きい00:00:00
編集:これはDateTime
. である場合、aが より大きいVarchar
ため、同じ問題があります。22:00
Varchar
00:00:00
BETWEENに関する情報:
BETWEEN は、 test_expression の値が begin_expression の値以上で end_expression の値以下の場合にTRUEを返します。
テーブルでは、アクセス時間 '23:00' (テスト式) は '22:00:00' (開始式) よりも大きいですが、'00:00:00' (終了式) より小さくないため、false を返します。
結果を表示するには、クエリを次のように変更します。
select accesstime from myTable
where accesstime between '00:00:00' and '23:00:01'
時間をdatetimeに変換し、 dateadd関数で1日を時間「00:00:00」に追加すると、真に機能すると思います。
サンプルコードは次のとおりです。
CREATE table EX_Time (accesstime nvarchar(100),starttime nvarchar(100),endtime nvarchar(100))
INSERT INTO EX_Time(accesstime,starttime,endtime)
VALUES (N'23:00:00',N'22:00:00',N'00:00:00')
select *
FROM Ex_Time
Where convert(datetime,accesstime) BETWEEN convert(datetime,'22:00:00')
AND dateadd(day,1,convert(datetime,'00:00:00'))