Maîtriser Oracle SQL données Arithmétique


Date de l'arithmétique est calculée en fonction de la date. Faisons le calcul sur une plage la nuit à plusieurs reprises pour un développeur, en particulier dans de nombreux développeurs Oracle sentir cela. Mais beaucoup d'entre nous ne savaient pas trucs simples et de nouvelles fonctionnalités (comme INTERVALLE introduites dans Oracle 9). Si vous connaissez et comprenez en profondeur les différentes fonctions de ce jour, vous ne pouvez pas sentir cela comme une douleur.

Pour une meilleure compréhension, laissez-moi mettre les différentes opérations possibles comme arguments ici.




  • Ajout à aujourd'hui
  • Soustraire partir d'une date
  • Différence entre la date
  • En comparant les dates
  • Particularités de la date
  • Conversion de type

Si explorer pleinement ces étapes simples, vous pouvez sentir votre auto comme un expert des calculs de dates dans Oracle. Après la lecture de ce prêt le sujet sur les fonctions analytiques Oracle pourrait vous faire un expert.

Arithmétique smile

1) Ajouter à aujourd'hui

En plus d'un jour est aussi simple que l'ajout de numéros. Oui, vous pouvez utiliser l'opérateur «+» immédiatement. Par exemple, SYSDATE + 7 vous donne sept jours ou une semaine après SYSDATE. Donc, si vous souhaitez ajouter un mois nous serons facile de conclure SYSDATE + 30. Eh bien. Mais ce ne est pas correct.

Quel serait le résultat de SYSDATE + 30 si le nombre de jours dans le mois en cours est de 31? serait un jour de moins que ce que nous attendons. Si SYSDATE est 01-SEP-2008, le résultat donnera 01-OCT-2008 et qui est parfaitement faux. Ce est où la fonction Oracles Date ADD_MONTHS pièces. ADD_MONTHS (SYSDATE, 1) donnent la date après un mois. Le deuxième paramètre est le nombre de mois et ici est dit d'ajouter un mois à SYSDATE. Pas besoin de se inquiéter de savoir si ce est Janvier ou Février ou Août etc.

D'Accord! Je veux prendre un pas en avant, comment calculer le jour après un an. Permettez-moi de vous donner un indice. Et la clé est - "Un an a seulement 12 mois». Oui six ADD_MONTHS correcte (SYSDATE, 12) donnera jours après 1 an.

Vous pensiez ADD_YEARS (SYSDATE, 1)? Ha Ha! Bonne idée! Mais Oracle n'a pas complété cette fonction. Vous pouvez créer une fonction personnalisée avec le calcul ci-dessus.

Exemple

DECLARE aujourd'hui DATE: = sysdate; DATES avenir; BEGIN avenir: aujourd'hui = + 45; dbms_output.put_line ('aujourd'hui est:' || aujourd'hui); dbms_output.put_line («Jour après 45 jours est: 'avenir ||); Futures: = ADD_MONTHS (aujourd'hui, 2); dbms_output.put_line («Jour après deux mois est: 'avenir ||); Futures: = ADD_MONTHS (aujourd'hui, 12); dbms_output.put_line («Jour après 1 année est: 'avenir ||); FIN;/Sortie sera Aujourd'hui, ce est: 01-SEP-08Day après 45 jours est: 16-Octobre-08Day après 2 mois: 01-NOV-08Day après 1 an est: 01-Sep-09

2) Soustraire partir d'une date

Oui, vous serez ramasser plus rapidement si vous dites simplement remplacer négative au lieu de la +. Mais ce qui arrive à ADD_MONTHS? Y at-il une fonction de SUBTRACT_MONTHS? Ahhhh! Mais pas que. Il suffit de mettre le nombre de mois à ajouter dans un signe négatif.

Exemple

DECLARE aujourd'hui DATE: = sysdate; DATES dernières; BEGIN passé = aujourd'hui - 45; dbms_output.put_line ('aujourd'hui est:' || aujourd'hui); dbms_output.put_line («Jour avant 45 jours est: '|| passé); dernières: = ADD_MONTHS (aujourd'hui, -2); dbms_output.put_line («Jour avant deux mois est: '|| passé); dernières: = ADD_MONTHS (aujourd'hui, 12); dbms_output.put_line («Jour avant le 1er année est: '|| passé); FIN;/Sortie sera Aujourd'hui est: premiers 02-septembre-08Day 45 jours est: 19-Jul-08Day 2 premiers mois est: 02-Juillet-08Day avant un année est: 02-Sep-09

3) Différence entre la date

Pourtant, nous pouvons utiliser des opérations très simples en utilisant - l'opérateur qui fournit le nombre de jours entre deux dates. Voir exemple ci-dessous.

DECLARE DATE d1: = '01 -août 2008 '; Aujourd'hui DATE: = TRUNC (SYSDATE); BEGIN dbms_output.put_line ('Pas de jours entre deux dates:' || (aujourd'hui-d1)); FIN;

/

Sortie sera Nombre de jours entre deux dates: 31

Il semble très simple droit? Errrr! Mais qu'est-ce que TRUNC? Cette fonction réduit le temps partiel SYSDATE. Il suffit de placer SYSDATE lieu de TRUNC (SYSDATE), vous verrez la même sortie que d'une fraction. La fraction reflète la différence de temps. Il suffit donc ignorer que je ai mis cela.

Maintenant, vous pourriez penser à la façon d'interpréter en mois ou en années? Ici, le rôle de la fonction de la date Oracle MONTHS_BETWEEN arrive.

MONTHS_BETWEEN (date1, date2) donne le nombre de mois entre deux dates. Disons que je ai rejoint une entreprise dans '01 -juil-2007 »et travaille toujours dans cette société. Le code suivant donnera mon expérience en mois.

DECLARE DATES joined_on: = '01 -juil-2007 '; Aujourd'hui DATE: = TRUNC (SYSDATE, 'mm'); BEGIN dbms_output.put_line («Je ai travaillé ici pendant abeille '|| MONTHS_BETWEEN (aujourd'hui joined_on) ||' mois); FIN;/Sortie sera Je ai abeilles travailler ici pour 14 mois

C'est Intéressant? Je pense que maintenant vous êtes plus à l'aise avec la date de calcul que vous êtes au-dessus.

4) Date Comparaison

Ce ne est pas aussi complexe que les précédents. Cette façon similaire à la comparaison d'autres données (/ caractères numériques). Vous pouvez utiliser les opérateurs =, opérateurs.

Exemple ci-dessous montre juste pour vous tout de suite. L'exemple des analyses entre les trois frères John, Peter et David qui prennent leur date de naissance.

DECLARE DATES johns_dob: = '01 -juil-1960 '; DATES peters_dob: = '01 -juil-1970 '; DATES davids_dob: = '01 -juil-1960 '; Alors commencer SI johns_dob peters_dob --both né à des dates différentes SI johns_dob Sortie doit être: John est plus jeune que Peter! John et David sont des jumeaux!

Je me attends vos commentaires si vous lisez attentivement l'exemple ci-dessus.

5) Certaines fonctions spéciales de la date

Oui, il ya plus de fonctionnalités dans Oracle pour effectuer des opérations arithmétiques. Je les énumérer ici pour référence.

SYSDATE renvoie la date et l'heure du système d'exploitation (l'endroit où le serveur Oracle est en cours d'exécution). Il se agit d'une colonne de pseudo.

SYSTIMESTAMP similaire à SYSDATE mais comprend les fractions de secondes et fuseau horaire.

TRUNC (date) couper la portion de temps certaine date.

TRUNC (date, 'mm') renvoie le premier jour du mois pour certaine date.

LAST_DAY (date) retourne le dernier jour du mois pour certaine date.

EXTRAIT extraits et renvoie la valeur spécifiée à une date ou l'heure. Vous pouvez tirer le jour, mois, année, heure, en plus d'une date en utilisant la syntaxe ci-dessous.

EXTRAIT (AN | TIMEZONE_MINUTE | TIMEZONE_REGION DE interval_value)

Mais ce qui est important, ce est que vous pouvez tirer seulement un jour, le mois ou l'année d'une valeur de date. Pendant des heures, minutes, tirant le fuseau horaire que vous devez utiliser plage de valeur avec laquelle vous ne pouvez pas tirer le jour/mois/année.

Exemple

SELECT EXTRACT (JOUR DE SYSDATE) FROM DUAL; EXTRAIT (DAYFROMSYSDATE) ----------------------- 2 SELECT EXTRACT (MOIS DE SYSDATE) FROM DUAL; EXTRAIT (MONTHFROMSYSDATE) ------------------------- 9 SELECT EXTRACT (AN À PARTIR SYSDATE) FROM DUAL; EXTRAIT (YEARFROMSYSDATE) ------------------------ 2008

Nouveaux types de données à l'appui des calculs de dates - INTERVALLE et TIMESTAMP

INTERVALLE, et TIMESTAMP sont nouveaux types de données, qui vous les calculs plus sophistiqués aider. Ces types étaient disponibles à partir d'Oracle 9i.

INTERVALLE est un type spécial qui stocke la plage ou la différence entre les deux valeurs de date. Il existe deux types d'intervalles.

1. 2. INTERVALLE année à mois INTERVALLE JOUR AU DEUXIÈME

TIMESTAMP est un nouveau type de données qui définit les valeurs d'horodatage. Vous pouvez définir une date et l'heure ou le temps ou l'heure locale avec la région. Exemple ci-dessous est expliquée en termes simples.

DECLARE CURRENT_TIME TIMESTAMP: = to_timestamp (SYSDATE); zone_time TIMESTAMP WITH Fuseau horaire = to_timestamp (SYSDATE); LOCAL_TIME timestamp with time zone locale: = to_timestamp (SYSDATE); BEGIN dbms_output.put_line (CURRENT_TIME); dbms_output.put_line (zone_time); dbms_output.put_line (LOCAL_TIME); FIN;/Sortie sera 02-Sept-08 03.36.50.000000 PM 02-Septembre-08 03.36.50.000000 PM 05: 30 02-Sept-08 03.36.50.000000 PM Vous pouvez voir variable définie avec le fuseau horaire est 5: 30 à la fin qui est le fuseau horaire.

Voir l'exemple ci-dessous; Je ai essayé de calculer le temps d'achèvement d'une heure de début et la durée de l'athlète de battre le record.

DECLARE TIMESTAMP start_time AVEC fuseau horaire; Durée INTERVALLE JOUR AU DEUXIÈME: = '3 12: 30: 06,7'; TIMESTAMP heure_fin AVEC fuseau horaire; BEGIN start_time: = sysdate; end_time: = start_time + durée; dbms_output.put_line («Groupe a commencé: '|| start_time); dbms_output.put_line («Tâche terminée: '|| end_time); FIN; Sortie sera Opération commencé: 02-Sept-08 12.17.05.000000 PM 05: 30Task terminé: 06-Sept-08 12.47.11.700000 AM 05: 30 DECLARE t INTERVALLE année à mois: = '0-0'; BEGIN dbms_output.put_line ('aujourd'hui:' || (sysdate + t)); t: = '0-1'; dbms_output.put_line ('Après un mois:' || (sysdate + t)); t: = '1-0'; dbms_output.put_line ('Après 1 an:' || (sysdate + t)); t: = '2-1'; dbms_output.put_line («Après deux ans et un mois: '|| (SYSDATE + t)); t: = '1-1'; dbms_output.put_line ('Après 1 an et un mois' || (sysdate + t)); FIN;/

6) Type de conversion

Oracle fournit de nombreuses fonctions pour les conversions à date et l'heure. En dehors de cela, TO_DATE et les fonctions to_char sont très familiers.

  • TO_DATE convertit les données de caractères en une date.
  • TO_CHAR convertit en données DATE de caractères.

Exemple

  • TO_DATE ('25/01/2008 ',' dd/mm/aaaa) - Retourne la valeur '25 -JAN-08 'date de type.
  • TO_CHAR (SYSDATE, 'MON') - Retourne le nom du mois abrégé

Il ya beaucoup d'autres fonctions disponibles pour la conversion des intervalles. Je ai énuméré ci-dessous.

  • NUMTODSINTERVAL convertit un nombre ou une expression dans un jour pour le second intervalle.
  • NUMTOYMINTERVAL, convertit un nombre ou une expression dans un an à la gamme MOIS.
  • TO_DSINTERVAL convertit chaîne JOUR AU DEUXIÈME intervalle.
  • TO_YMINTERVAL convertit une chaîne de caractères à Année à taper MOIS
  • TO_TIMESTAMP convertit TIMESTAMP
  • TO_TIMESTAMP_TZ convertit les données de caractères à timestamp with time zone

Je laisse les exemples pour la conversion comme un exercice pour vous avec l'espoir que vous avez suffisamment confiance en moi maintenant.

imporve vos compétences arithmétique!

Lire mon article sur les exceptions Oracle d'écrire du code efficace avec les caractéristiques de la gestion des erreurs.

Voir aussi

Conseils pour l'entrevue et les applications Oracle, Oracle 10g nouvelles fonctionnalités de SQL, venir sur la limite de 255 caractères de DBMS_OUTPUT, une meilleure écriture SQL, fonctions analytiques Oracle

Cliquez ci-dessous pour agrandir l'exemple.

(0)
(0)

Commentaires - 0

Sans commentaires

Ajouter un commentaire

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Caractères restants: 3000
captcha