Closed GitEngHar closed 3 weeks ago
BETWEEN は 以上と以下の式になる
schema
CREATE TABLE simple (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`create_date` DATETIME NOT NULL,
`update_date` DATETIME NOT NULL
);
INSERT INTO simple
(`id`, `create_date`, `update_date`)
VALUES
(1, '2024/06/05 10:00:00', '2024/06/05 10:00:00'),
(2, '2024/06/06 00:00:00', '2024/06/06 00:00:00'),
(3, '2024/06/06 10:00:00', '2024/06/06 10:00:00');
クエリ
select * from simple
where simple.create_date BETWEEN '2024-06-05' AND '2024-06-06';
クエリ
select * from simple
where '2024-06-05' BETWEEN simple.start_term AND simple.end_term AND
'2024-06-06' BETWEEN simple.start_term AND simple.end_term ;
上記の場合、値の範囲は以下になる
start = x~6/5 00:00:00 AND x~6/6 00:00:00
end = 6/5 00:00:00~x AND 6/6 00:00:00~x
6/5と6/6の0:00を含むがそれ以外の日付を退くクエリ
始まる値は 6/5 と 6/6 以下でなければいけない 終わる値は 6/5 と 6/6 以上でなければならない
~ 6/5 6/6 ~
6/6 10:00:00の値が入手出来てしまう。。 6/5 10:00 は無理だが
これは日付の上限値判定が気になる
6/6 23:59:59 で 後半の日付を変えると 6/6の値が出ないことから、おそらく 日付データの時刻見指定は 00:00:00となる
この場合、小さいほうの変数は 小さい閾値の基準 大きい負の変数は大きい閾値の基準として考えるのがよさそう
CREATE TABLE simple (
id
INT PRIMARY KEY AUTO_INCREMENT,
start_term
DATETIME NOT NULL,
end_term
DATETIME NOT NULL
);
INSERT INTO simple
(id
, start_term
, end_term
)
VALUES
(1, '2024/06/05 00:00:00', '2024/06/06 10:00:00'),
(2, '2024/06/06 00:00:00', '2024/06/06 00:00:00'),
(3, '2024/06/06 10:00:00', '2024/06/06 10:00:00'),
(4, '2024/06/04 10:00:00', '2024/06/06 10:00:00'),
(5, '2024/06/05 23:59:59', '2024/06/05 23:59:59'),
(6, '2024/06/05 00:00:00', '2024/06/06 23:59:59'),
(7, '2024/06/05 23:59:59', '2024/06/05 23:59:59'),
(8, '2024/06/05 00:00:01', '2024/06/05 00:00:01'),
(9, '2024/06/04 00:00:01', '2024/06/07 00:00:01'),
(10, '2024/06/05 00:00:01', '2024/06/06 00:00:01'),
(11, '2024/06/04 23:59:59', '2024/06/06 00:00:01'),
(12, '2024/06/05 00:00:00', '2024/06/05 23:59:59');
===
select * from simple where '2024-06-05' BETWEEN simple.start_term AND simple.end_term AND '2024-06-06' BETWEEN simple.start_term AND simple.end_term ;
通常のBETWEENは理解できているが、使い方次第で複雑身を増すのでしっかり理解しておきたい
innner join を呼吸のように使いこなしたい