Maison >base de données >tutoriel mysql >Comment construire une date dans MySQL à partir de champs jour, mois et année séparés ?

Comment construire une date dans MySQL à partir de champs jour, mois et année séparés ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-25 07:46:54330parcourir

How to Construct a Date in MySQL from Separate Day, Month, and Year Fields?

Création d'une date à partir de champs individuels jour, mois et année dans MySQL

Dans les applications de base de données, il est souvent nécessaire de construire des dates à partir de champs distincts pour le jour, le mois et l’année à des fins de comparaison ou d’autres traitements. Cela devient particulièrement pertinent lorsque le schéma de base de données est hérité d'une conception précédente qui a choisi de stocker les composants de date de manière non standard.

Énoncé du problème (révisé)

Cette question concerne la création d'un objet date en SQL à partir d'une table avec des champs individuels pour « jour », « mois » et « année » plutôt qu'un champ de date consolidé. L'objectif est de comparer ces dates avec les plages de saisie de l'utilisateur à l'aide de la clause BETWEEN.

Schéma de la base de données

Voici le schéma fourni pour la table « date » :

CREATE TABLE IF NOT EXISTS `date` (
  `deposition_id` varchar(11) NOT NULL default '',
  `day` int(2) default NULL,
  `month` int(2) default NULL,
  `year` int(4) default NULL,
  PRIMARY KEY  (`deposition_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Solution

Pour créer un objet date à partir de ces composants individuels, la logique SQL suivante peut être utilisée :

  1. Construisez une date à partir de l'année et du mois : utilisez la fonction MAKEDATE() avec un jour constant de 1 pour obtenir un DATETIME représentant le premier jour de l'année et du mois spécifiés.
  2. Ajuster la date avec le mois et le jour : appliquez le Fonction DATE_ADD() pour ajouter les valeurs du mois et du jour en fonction de la date/heure initiale.

Exemple de requête

Pour sélectionner toutes les lignes de la table 'date' où la date construite se situe dans une plage spécifique :

SELECT * FROM `date`
WHERE DATE_ADD(DATE_ADD(MAKEDATE(year, 1), INTERVAL (month)-1 MONTH), INTERVAL (day)-1 DAY)
BETWEEN '2013-01-01' AND '2014-01-01';

Cette requête renverra toutes les lignes où la date combinée construite à partir des champs individuels est entre les deux dates fournies.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn