Sur les différents SGBD, il y a une multitude de fonctions :
« Enseigner, ce n’est pas remplir un vase, c’est allumer un feu » Une phrase qui ne date pas d’hier puisqu’elle est de Montaigne …
L’objectif n’est pas de les voir toutes mais d’en utiliser certaines (si possible les plus pertinentes), pour voir les différences entre SGBD et en retenir quelques une.
SELECT CURDATE();-- fonction sur MYSQL (juste la date)SELECT GETDATE();-- fonction transactSQL de SQLSERVERSELECT SYSDATE();-- fonction sur ORACLESELECT CURRENT_TIMESTAMP;-- norme SQL : fonction "système" pas de paramètres-- (fonctionne sur MYSQL et PostGreSQL , mais pas sur ORACLE et SQLSERVER)SELECT NOW();-- fonction sur MYSQL (date+heure)
DROP TABLE IF EXISTS TD_telephone;
CREATE TABLE TD_telephone
(
idTelephone INTEGER AUTO_INCREMENT
, type_id CHAR(2)
, marque_id INTEGER
, date_achat DATE
, prix DECIMAL (9,2) /* NUMBER(9,2) sur ORACLE */
, proprietaire_id INTEGER
, couleur VARCHAR(25)
, PRIMARY KEY(idTelephone)
);
INSERT INTO TD_telephone (idTelephone,type_id,marque_id,date_achat,prix,proprietaire_id,couleur) VALUES (1,'SP' ,1,STR_TO_DATE('15/01/2020', '%d/%m/%Y'),139.99,190120,'ROUGE');
-- il est déconseillé de mettre une valeur à une clé primaire => pour vérification
INSERT INTO TD_telephone (idTelephone,type_id,marque_id,date_achat,prix,proprietaire_id) VALUES (NULL,'SP' ,2,STR_TO_DATE('14/03/2020', '%d/%m/%Y'), 99.99,190215);
INSERT INTO TD_telephone
(idTelephone,type_id,marque_id,date_achat,prix,proprietaire_id,couleur) VALUES
(NULL,'CL' ,3,STR_TO_DATE('02/05/2020', '%d/%m/%Y'), 49.11,190001,'NOIR');
INSERT INTO TD_telephone
(idTelephone,type_id,marque_id,date_achat,prix,proprietaire_id,couleur) VALUES
(NULL,'CO' ,4,STR_TO_DATE('25/07/2020', '%d/%m/%Y'), 89.14,190222,'BLANC');
INSERT INTO TD_telephone
(idTelephone,type_id,marque_id,date_achat,prix,proprietaire_id) VALUES
(NULL,'IP' ,5,STR_TO_DATE('30/09/2020', '%d/%m/%Y'),359.49,190561);
INSERT INTO TD_telephone
(idTelephone,type_id,marque_id,date_achat,prix,proprietaire_id,couleur) VALUES
(NULL,'CO' ,5,STR_TO_DATE('01/01/2021', '%d/%m/%Y'), 99.51,122120,'BLANC'),
(NULL,'SP' ,1,'2013-01-15',189,190622,'ROUGE'),
(NULL,NULL ,NULL,'2013-01-15',20,190623,'ROUGE'),
(NULL,NULL ,1,'2013-01-15',NULL,NULL,NULL);
exemple :
-- MYSQL
SELECT date_achat,
YEAR(date_achat) as Annee,
DATEDIFF(date_achat, CURDATE()) as "Difference" ,
DATE_ADD(date_achat, INTERVAL 30 DAY) as Plus30j ,
DATE_SUB(date_achat, INTERVAL 30 DAY) as Moins30j ,
DATE_ADD(date_achat, INTERVAL -30 DAY) as Moins30j2
FROM TD_telephone;
-- SQLSERVER
SELECT *,
YEAR(date_achat) as Annee,
DATEDIFF(DAY, date_achat, DateDemandee) as [Difference],
DATEADD(DAY, 30, date_achat) as Plus30j,
DATEADD(DAY, -30, date_achat) as Moins30j
FROM TD_telephone;
-- ORACLE
SELECT *,
EXTRACT(YEAR FROM date_achat) as Annee,
DateDemandee - date_achat as "Difference",
date_achat + 30 as Plus30j,
date_achat - 30 as Moins30j
FROM TD_telephone;
-- ADD_MONTHS(date_achat, 2)
DROP TABLE IF EXISTS posts;
CREATE TABLE posts (
id_post INT AUTO_INCREMENT
, title VARCHAR(255) NOT NULL
, content LONGTEXT
, online VARCHAR(255) DEFAULT 0
, dt_created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
, dt_updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
, ts_created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
, ts_updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
, PRIMARY KEY (id_post)
);
Dans la documentation, beaucoup de synonymes :
https://dev.mysql.com/doc/refman/8.0/en/timestamp-initialization.html