GitEngHar / WorkUp

LearnJava
0 stars 0 forks source link

キタエル × MYSQL × BETWEEN #13

Closed GitEngHar closed 3 weeks ago

GitEngHar commented 3 months ago

通常のBETWEENは理解できているが、使い方次第で複雑身を増すのでしっかり理解しておきたい

innner join を呼吸のように使いこなしたい

GitEngHar commented 3 months ago

キホン × BETWEEN

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を含むがそれ以外の日付を退くクエリ

GitEngHar commented 3 months ago

始まる値は 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となる

GitEngHar commented 3 months ago

この場合、小さいほうの変数は 小さい閾値の基準 大きい負の変数は大きい閾値の基準として考えるのがよさそう

GitEngHar commented 3 months ago

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');

===

INSERT INTO simple(create_date,update_date) VALUES('','2024/06/05');

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 ;

GitEngHar commented 2 months ago

inner join を使いこなそう !!