1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
| --------------
START TRANSACTION
--------------
--------------
DROP DATABASE IF EXISTS `base`
--------------
--------------
CREATE DATABASE IF NOT EXISTS `base`
DEFAULT CHARACTER SET `latin1`
DEFAULT COLLATE `latin1_general_ci`
--------------
--------------
DROP TABLE IF EXISTS `calendrier`
--------------
--------------
CREATE TABLE `calendrier`
( `periode` date NOT NULL PRIMARY KEY
) ENGINE=InnoDB
DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
ROW_FORMAT=COMPRESSED
--------------
--------------
DROP PROCEDURE IF EXISTS remplir
--------------
--------------
CREATE PROCEDURE remplir (IN In_deb date,
IN In_fin date)
DETERMINISTIC
NO SQL
BEGIN
DECLARE _date date DEFAULT NULL;
SET _date = In_deb;
while (_date <= In_fin)
do
insert into `calendrier` (`periode`) values (_date);
set _date = DATE_ADD(_date,INTERVAL 1 DAY);
end while;
END
--------------
--------------
call remplir('2019-03-01','2019-03-13')
--------------
--------------
select * from `calendrier`
--------------
+------------+
| periode |
+------------+
| 2019-03-01 |
| 2019-03-02 |
| 2019-03-03 |
| 2019-03-04 |
| 2019-03-05 |
| 2019-03-06 |
| 2019-03-07 |
| 2019-03-08 |
| 2019-03-09 |
| 2019-03-10 |
| 2019-03-11 |
| 2019-03-12 |
| 2019-03-13 |
+------------+
--------------
DROP TABLE IF EXISTS `test`
--------------
--------------
CREATE TABLE `test`
( `id` integer unsigned NOT NULL auto_increment PRIMARY KEY,
`date` datetime NOT NULL
) ENGINE=InnoDB
DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
ROW_FORMAT=COMPRESSED
--------------
--------------
insert into `test` (`date`) values
('2019-03-01'),('2019-03-03'),('2019-03-04'),('2019-03-05'),('2019-03-06'),
('2019-03-07'),('2019-03-09'),('2019-03-10'),('2019-03-11'),('2019-03-12'),('2019-03-13')
--------------
--------------
select * from `test`
--------------
+----+---------------------+
| id | date |
+----+---------------------+
| 1 | 2019-03-01 00:00:00 |
| 2 | 2019-03-03 00:00:00 |
| 3 | 2019-03-04 00:00:00 |
| 4 | 2019-03-05 00:00:00 |
| 5 | 2019-03-06 00:00:00 |
| 6 | 2019-03-07 00:00:00 |
| 7 | 2019-03-09 00:00:00 |
| 8 | 2019-03-10 00:00:00 |
| 9 | 2019-03-11 00:00:00 |
| 10 | 2019-03-12 00:00:00 |
| 11 | 2019-03-13 00:00:00 |
+----+---------------------+
--------------
select *
from `calendrier` as t1
left outer join `test` as t2
on t2.date = t1.periode
where t2.date is null
--------------
+------------+------+------+
| periode | id | date |
+------------+------+------+
| 2019-03-02 | NULL | NULL |
| 2019-03-08 | NULL | NULL |
+------------+------+------+
--------------
COMMIT
--------------
Appuyez sur une touche pour continuer... |
Partager