Ce post, j'essaie d'expliquer beaucoup de choses sur la date dans Oracle comme les fonctions de date Oracle SQL, le format de date Oracle SQL, la comparaison de date Oracle SQL, la différence de date Oracle en années, la différence de date Oracle en jours, la différence de date Oracle en mois
Oracle a fourni des types de date et d'horodatage pour stocker les informations de date et d'heure dans la base de données Oracle.
Type de données de date
DATE est le type de données oracle que nous connaissons tous lorsque nous pensons à la représentation des valeurs de date et d'heure. Il a la capacité de stocker le mois, le jour,
l'année, le siècle, les heures, les minutes et les secondes. Le problème avec le type de données DATE est sa granularité lorsque vous essayez de déterminer un intervalle de temps entre deux événements lorsque les événements se produisent à moins d'une seconde d'intervalle. Ce problème est résolu avec le type de données TIMESTAMP
Horodatage
Oracle a développé le type de données DATE et nous a donné le type de données TIMESTAMP qui stocke toutes les informations stockées par le type de données DATE, mais inclut également les secondes fractionnaires. Si vous souhaitez convertir un type de données DATE en un format de type de données TIMESTAMP, vous pouvez utiliser la fonction CAST
SQL> SELECT CAST(last_login_date AS TIMESTAMP) "Date" FROM utilisateurs ; Date------------------------------- ----------------------20-AVR-16 01.55.14.000000 PM21-JUN-16 14.16.36.000000 AM21-JUL-16 10.16.36.000000 AM21-SEP- 16 11.16.36.000000 AM21-DEC-16 11.16.36.000000 AM
Afin d'obtenir la date et l'heure système renvoyées dans un type de données TIMESTAMP, vous pouvez utiliser la fonction SYSTIMESTAMP telle que :
SQL> SELECT SYSTIMESTAMP FROM DUAL;SYSTIMESTAMP------------------------------------------- -----------------------------------------01-SEP-19 01.02.17.158913 PM -04:00Quelques points importants
1) Les types DATE et TIMESTAMP contiennent toujours un composant de date et d'heure. À minuit exactement, l'heure est 00:00:00.
SELECT TO_CHAR(SYSDATE, 'MM/DD/YYYY HH:MI:SS AM') date_with_time,TRUNC(SYSDATE) aujourd'hui,TO_CHAR(TRUNC(SYSDATE), 'MM/DD/YYYY HH:MI:SS AM' ) date_with_time_midnightFROM double 2 3 4 ;DATE_WITH_TIME TODAY DATE_WITH_TIME_MIDNIGHT---------------------- --------- --------- --------------27/10/2016 11:01:00 27-OCT-16 27/10/2016 00:00:002) Ne vous fiez jamais aux conversions implicites de chaînes en dates ou de dates en chaînes. Effectuez toujours explicitement les conversions avec les fonctions TO_CHAR, TO_DATE et TO_TIMESTAMP, ou utilisez les littéraux ANSI DATE ou TIMESTAMP.
3) Lorsque vous effectuez des comparaisons de date ou d'horodatage, tenez toujours compte de l'impact du composant temporel. Si vous souhaitez déduire la composante temporelle de la comparaison, utilisez le TRUNC ou ROND fonctions pour le supprimer des deux côtés de la comparaison.select * from fnd_table where trunc(creation_date)4) Vous pouvez afficher le format de date requis en utilisant nls_date_format au niveau de la session
Changer le format de date dans oracle en utilisant nls_date_format
ALTER SESSION SET NLS_DATE_FORMAT ='YYYY MM DD';sélectionnez sysdate à partir de dual;ALTER SESSION SET NLS_DATE_FORMAT ='HH24:MI:SS';sélectionnez sysdate à partir de dual;alter session set nls_date_format ='dd-mon-yyyy hh24 :mi:ss';select sysdate from dual;5) Voici un bon résumé des formats d'heure que nous pouvons utiliser
Élément Description Éléments de format de date SCC ou CC Siècle ; S préfixe la date BC avec – AAAA ou SYYYY Année ; S préfixe la date BC avec – AAAA ou AA ou A Les 3, 2 ou 1 derniers chiffres de l'année A,AAAA Année avec une virgule à cette position IYYY, IYY, IY, I Année à 4, 3, 2 ou 1 chiffres selon la norme ISO ANNÉE ou ANNÉE Année en toutes lettres ; S préfixe la date BC avec – BC ou AD Indicateur BC/AD C.-B. ou A.D. Indicateur BC/AC avec périodes Q Trimestre de l'année MM Mois, valeur à deux chiffres MOIS Nom du mois rempli d'espaces jusqu'à 9 caractères LUN Nom du mois, abréviation à trois lettres RM Mois en chiffres romains WW ou W Semaine de l'année ou du mois JJ ou JJ ou D Jour de l'année, du mois ou de la semaine JOUR Nom du jour rempli d'espaces jusqu'à 9 caractères DY Nom du jour ; Abréviation de 3 lettres J Jour julien ; le nombre de jours depuis le 31 décembre 4713 avant JC Éléments de format d'heure AM ou PM Indicateur de méridien M.A. ou PM Indicateur de méridien avec périodes HH ou HH12 ou HH24 Heure du jour ou heure(1-12) ou heure(0-23) MI Minute (0-59) SS Deuxième (0-59) SSSS Minutes après minuit (0-86399) Suffixes TH Numéro ordinal (c'est-à-dire DDTH pour 5TH) SP Numéro épelé (c'est-à-dire DDSP pour CINQ) SPTH ou THSP Numéros ordinaux épelés (c'est-à-dire DDSPTH pour FIFTH) Autres éléments de formatage / , . La ponctuation est reproduite dans le résultat "du" La chaîne entre guillemets est reproduite dans le résultat fonctions de date d'oracle
Nous avons appris le type de données Date et Horodatage dans la section précédente. Nous allons maintenant voir en détail les fonctions de date oracle importantes et comment nous pouvons les utiliser
ADD_MONTHS
Fonction de date Description ADD_MONTHS (date, n) Renvoie une valeur de date après avoir ajouté 'n' mois à la date 'x'. sélectionnez ADD_MONTHS ('16-Sep-81', 3) à partir de deux ----------------------------------------16-Dec- 81ADD_MONTHS décale toujours la date de mois entiers. Vous pouvez fournir une valeur fractionnaire pour le paramètre month_shift, mais ADD_MONTHS arrondira toujours au nombre entier le plus proche de zéro, comme illustré dans ces
exemples :Alors
sélectionnez ADD_MONTHS ('28-FEB-2005', 1.5) à partir du double -------------------------------- -----------31-mars-2005Nous pouvons également utiliser des valeurs négatives
select ADD_MONTHS ('28-FEB-2005', -1) from dual------------------------------31 -Janvier-2005Dernier_jour
Fonction de date Description LAST_DAY (x) Il est utilisé pour déterminer le nombre de jours restant dans un mois à partir de la date ‘x’ spécifiée. La fonction LAST_DAY renvoie la date du dernier jour du mois pour une date donnée. Cette fonction est utile car le nombre de jours dans un mois varie tout au long de l'année.
sélectionnez LAST_DAY ('01-Jun-16') à partir du double--------------------------------- ------------------30-juin-2016Prochain_jour
Fonction de date Description NEXT_DAY (x, week_day) Renvoie la date suivante du "week_day" à ou après la date "x". NEXT_DAY renvoie la date du premier jour de la semaine nommé par jour qui est postérieur à la date. Le type de retour est toujours DATE, quel que soit le type de données de date. Le jour de l'argument doit être un jour de la semaine dans la langue de date de votre session, soit le nom complet ou l'abréviation
sélectionnez NEXT_DAY ('01-Jun-08', 'Wednesday') à partir du double------------------------------ --------------04-JUN-08MONTHS_BETWEEN
Fonction de date Description MONTHS_BETWEEN (x1, x2) Renvoie le nombre de mois entre les dates x1 et x2. La fonction MONTHS_BETWEEN calcule le nombre de mois entre deux dates et renvoie cette différence sous forme de nombre
Les règles de calcul sont
1) Si date1 est postérieure à date2, alors MONTHS_BETWEEN renvoie un nombre positif.
2) Si date1 est antérieur à date2, alors MONTHS_BETWEEN renvoie un nombre négatif.
3) Si date1 et date2 tombent toutes deux le dernier jour de leurs mois respectifs, alors MONTHS_BETWEEN renvoie un nombre entier (pas de composante fractionnaire).
4) Si date1 et date2 sont dans des mois différents et qu'au moins une des dates n'est pas le dernier jour du mois, MONTHS_BETWEEN renvoie un nombre fractionnaire. La composante fractionnaire est calculée sur une base de 31 jours et prend également en compte toute différence dans la composante temporelle de date1 et date2.Exemples
sélectionnez MONTHS_BETWEEN ('29-FEB-2016', '31-MAR-20') à partir du double------------------------------ -------------------------------------------------- -----1sélectionnez MONTHS_BETWEEN ('31-MAR-1995', '28-FEB-1994') à partir du double ------------------------ -------------------------------------------------- -----13sélectionnez MONTHS_BETWEEN ('31-JAN-2006', '10-MAR-2006') à partir du double ------------------------ -------------------------------------------------- ---1.3225806SELECT MONTHS_BETWEEN(TO_DATE('02-02-1995','MM-DD-YYYY'),TO_DATE('01-01-1995','MM-DD-YYYY') ) "Mois" DE DOUBLE;Mois----------1.03225806Un point important à retenir
MONTHS_BETWEEN calcule la composante fractionnaire du nombre de mois en supposant que
chaque mois compte 31 jours. Ainsi, chaque jour supplémentaire sur un mois complet compte pour 1/31 de mois, et :
1 divisé par 31 =0,032258065Ronde
Fonction de date Description ROND (x, date_format) Renvoie la date « x » arrondie au siècle, à l'année, au mois, à la date, à l'heure, à la minute ou à la seconde le plus proche, comme spécifié par le « date_format ». La fonction ROUND arrondit une valeur de date à la date la plus proche comme spécifié par un masque de format. C'est comme la fonction numérique ROUND standard, qui arrondit un nombre au nombre le plus proche de la précision spécifiée, sauf qu'elle fonctionne avec des dates
Exemples
Sélectionnez ROUND (TO_DATE ('12-MAR-2016'), 'MONTH') à partir du double ;01-MAR-2016Sélectionnez ROUND (TO_DATE ('17-MAR-2016'), 'MONTH') à partir du double ;01 -AVR-2016sélectionnez ROUND (TO_DATE ('01-MAR-2007'), 'YYYY') de double ;01-JAN-2007sélectionnez ROUND (TO_DATE ('01-SEP-2007'), 'YEAR') de double ;01 -JAN-2008tronquer
Fonction de date Description TRUNC (x, date_format) Renvoie la date « x » inférieure ou égale au siècle, à l'année, au mois, à la date, à l'heure, à la minute ou à la seconde le plus proche, comme spécifié par le « date_format ». Exemples
Sélectionnez TRUNC (TO_DATE ('12-MAR-2016'), 'MONTH') à partir du double ;01-MAR-2016 Sélectionnez TRUNC (TO_DATE ('17-MAR-2016'), 'MONTH') à partir du double ; 01-MAR-2016 sélectionnez TRUNC (TO_DATE ('01-MAR-2007'), 'YYYY') de double ; 01-JAN-2007sélectionnez TRUNC (TO_DATE ('01-SEP-2007'), 'YEAR') de double;01-JAN-2007Arithmétique avec date Oracle
Nous pouvons effectuer de nombreuses opérations arithmétiques sur le type de données oracle date. Nous pouvons ajouter ou soustraire un nombre à ou à partir d'une date pour une valeur de date résultante. nous pouvons soustraire deux dates pour trouver le nombre de jours entre ces dates. nous ajoutons des heures à ce jour en divisant le nombre d'heures par 24.
Exemples d'addition et de soustraction
SQL> sélectionnez sysdate, sysdate+1/24, sysdate +1/1440, sysdate + 1/86400 from dual;SYSDATE SYSDATE+1/24 SYSDATE+1/1440 SYSDATE+1/86400------ -------------- -------------------- ---------------- ---- --------------------01-Jul-2016 06:32:12 01-Jul-2016 07:32:12 01-Jul-2016 06 :33:12 01-Jul-2016 06:32:13D'autres façons de l'utiliser sont
Description Expression de date Maintenant Date du système Demain/après-demain Date système +1 Il y a sept jours SYSDATE -7 Dans une heure SYSDATE + 1/24 Dans trois heures SYSDATE + 3/24 ou SYSDATE + 1/8 Dans une demi-heure SYSDATE + 1/48 Dans 10 minutes SYSDATE + 10/1440 30 secondes à partir de maintenant SYSDATE + 30/86400 Opération arithmétique sur la différence de date pour trouver le nombre de jours entre eux
Nous pouvons soustraire deux dates pour trouver la différence de jours entre les dates
Si la partie horaire est la même, alors ce sera toujours un nombre entierSELECT TO_DATE('25-MAR-2016 11:00:00 AM', 'DD-MON-YYYY HH:MI:SS AM')- TO_DATE(' 19-MAR-2016 11:00:00 AM', 'DD-MON-YYYY HH:MI:SS AM') diff_in_daysFROM dual;DIFF_IN_DAYS----------6Si la partie horaire n'est pas la même, alors il aura toujours des composants fractionnairesSELECT TO_DATE('25-MAR-2016 10:00:00 AM', 'YYYYMMDD HH:MI:SS AM')- TO_DATE('19-MAR-2016 11:00:00 AM', 'YYYYMMDD HH:MI:SS AM') diff_in_daysFROM dual;DIFF_IN_DAYS----------5.95833333SQL> SELECT TO_DATE('25-MAR-2016 11:00:00 AM', 'YYYYMMDD HH:MI :SS AM')- TO_DATE('19-MAR-2016 10:00:00 AM', 'YYYYMMDD HH:MI:SS AM') diff_in_daysFROM double ;DIFF_IN_DAYS----------6.04166666Nous pouvons trouver la différence de date oracle en mois à l'aide de la requête
SELECT MONTHS_BETWEEN(TO_DATE('02-02-1995','MM-DD-YYYY'),TO_DATE('01-01-1995','MM-DD-YYYY') ) "Diff_in_Months", (TO_DATE ('02-02-1995','MM-DD-YYYY')-TO_DATE('01-01-1995','MM-DD-YYYY') diff_in_daysFROM DUAL;Diff_in_Months diff_in_days--------- -------------------------------1.03225806 32Nous pouvons également trouver la différence de date oracle en années à l'aide de la requête
SELECT (TO_DATE('20130525', 'YYYYMMDD') - TO_DATE('20100101', 'YYYYMMDD')) diff_in_days , MONTHS_BETWEEN(TO_DATE('20130525', 'YYYYMMDD'), TO_DATE('20100101', 'YYYYMMDD ')) Diff_en_mois,TRUNC(MONTHS_BETWEEN(TO_DATE('20130525', 'YYYYMMDD'), TO_DATE('20100101', 'YYYYMMDD'))) Diff_in_months_no_fraction,TRUNC(TRUNC(MONTHS_BETWEEN(TO_DATE('20130525', 'YYYMMDD')YYYMMDD , TO_DATE('20100101', 'YYYYMMDD'))) / 12) Diff_in_years_no_fraction,MOD(TRUNC(MONTHS_BETWEEN(TO_DATE('20130525', 'YYYYMMDD'), TO_DATE('20100101', 'YYYYMMDD'))), 12) Diff_in_years_fraction_in_monthsfrom dual; diff_in_days diff_in_months diff_in_months_no_fraction diff_in_year_no_fraction diff_in_years_fraction_in_months________________________________________________________________________________1240 40.7741 40 30 30 30 40 40.
J'espère que vous aimez le message sur le type de données de date oracle. J'ai essayé d'expliquer diverses choses telles que les fonctions de date Oracle, le format de date Oracle SQL, la comparaison de dates Oracle SQL, la différence de date Oracle en années, la différence de date Oracle en jours, la différence de date Oracle en mois. Ce n'est pas un guide complet mais j'ai essayé de présenter beaucoup d'informations utiles pour le développeur Oracle SQLArticles connexes
comment écrire des requêtes sql
Tutoriel Oracle SQL :Instruction Sql de base
Tutoriel Oracle SQL :Restriction de l'ensemble de données
Fonctions à une seule ligne dans SQL
Traitement de décodage Oracle SQL
Télécharger Développeur Oracle SQL
https://docs.oracle.com/cd/B28359_01/olap.111/b28126/dml_commands_1029.htm#OLADM780