View a markdown version of this page

Types de données et littéraux interval - AWS Clean Rooms

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Types de données et littéraux interval

Vous pouvez utiliser un type de données interval pour stocker les durées dans des unités telles que seconds, minutes, hours, days, months et years. Les types de données et les littéraux interval peuvent être utilisés dans les calculs de date/heure, tels que l’ajout d’intervalles aux dates et aux horodatages, la somme des intervalles et la soustraction d’un intervalle d’une date ou d’un horodatage. Les littéraux interval peuvent être utilisés comme valeurs d’entrée pour intercaler les colonnes de type de données d’une table.

Syntaxe du type de données interval

Pour spécifier un type de données interval afin de stocker une durée en années et en mois :

INTERVAL year_to_month_qualifier

Pour spécifier un type de données interval afin de stocker une durée en jours, heures, minutes et secondes :

INTERVAL day_to_second_qualifier [ (fractional_precision) ]

Syntaxe du littéral interval

Pour spécifier un littéral interval afin de définir une durée en années et en mois :

INTERVAL quoted-string year_to_month_qualifier

Pour spécifier un littéral interval afin de définir une durée en jours, heures, minutes et secondes :

INTERVAL quoted-string day_to_second_qualifier [ (fractional_precision) ]

Arguments

quoted-string

Spécifie une valeur numérique positive ou négative spécifiant une quantité et l’unité date/heure en tant que chaîne d’entrée. Si la chaîne entre guillemets ne contient qu'un chiffre, elle AWS Clean Rooms détermine les unités à partir du qualificatif year_to_month_qualifier ou du day_to_second_qualifier. Par exemple, '23' MONTH représente 1 year 11 months, '-2' DAY représente -2 days 0 hours 0 minutes 0.0 seconds, '1-2' MONTH représente 1 year 2 months et '13 day 1 hour 1 minute 1.123 seconds' SECOND représente 13 days 1 hour 1 minute 1.123 seconds. Pour plus d’informations sur les formats de sortie d’un intervalle, consultez Styles d’intervalle.

year_to_month_qualifier

Spécifie la plage de l’intervalle. Si vous utilisez un qualificatif et que vous créez un intervalle dont les unités de temps sont inférieures au qualificatif, AWS Clean Rooms les plus petites parties de l'intervalle sont tronquées et supprimées. Les valeurs valides pour year_to_month_qualifier sont les suivantes :

  • YEAR

  • MONTH

  • YEAR TO MONTH

day_to_second_qualifier

Spécifie la plage de l’intervalle. Si vous utilisez un qualificatif et que vous créez un intervalle dont les unités de temps sont inférieures au qualificatif, AWS Clean Rooms les plus petites parties de l'intervalle sont tronquées et supprimées. Les valeurs valides pour day_to_second_qualifier sont les suivantes :

  • DAY

  • HOUR

  • MINUTE

  • SECOND

  • DAY TO HOUR

  • DAY TO MINUTE

  • DAY TO SECOND

  • HOUR TO MINUTE

  • HOUR TO SECOND

  • MINUTE TO SECOND

La sortie du littéral INTERVAL est tronquée au plus petit composant INTERVAL spécifié. Par exemple, lorsque vous utilisez un qualificatif MINUTE, AWS Clean Rooms les unités de temps inférieures à MINUTE sont supprimées.

select INTERVAL '1 day 1 hour 1 minute 1.123 seconds' MINUTE

La valeur résultante est tronquée à '1 day 01:01:00'.

fractional_precision

Paramètre facultatif qui spécifie le nombre de chiffres fractionnaires autorisés dans l’intervalle. L’argument fractional_precision ne doit être spécifié que si votre intervalle contient SECOND. Par exemple, SECOND(3) crée un intervalle qui n’autorise que trois chiffres fractionnaires, tels que 1,234 seconde. Le nombre maximum de chiffres fractionnaires est de six.

La configuration de session interval_forbid_composite_literals détermine si une erreur est renvoyée lorsqu’un intervalle est spécifié avec les parties YEAR TO MONTH et DAY TO SECOND.

Arithmétique des intervalles

Vous pouvez utiliser des valeurs interval avec d’autres valeurs datetime pour effectuer des opérations arithmétiques. Les tableaux suivants décrivent les opérations disponibles et le type de données résultant de chaque opération.

Note

Les opérations qui peuvent produire les résultats date et timestamp le font en fonction de la plus petite unité de temps impliquée dans l’équation. Par exemple, lorsque vous ajoutez un interval à une date, le résultat est une date, s’il s’agit d’un intervalle YEAR TO MONTH, et un horodatage s’il s’agit d’un intervalle DAY TO SECOND.

Les opérations où le premier opérande est un interval produisent les résultats suivants pour le second opérande donné :

Opérateur Date Horodatage Interval Numérique
- N/A N/A Interval N/A
+ Date Date/Horodatage. Interval N/A
* N/A N/A N/A Interval
/ N/A N/A N/A Interval

Les opérations où le premier opérande est une date produisent les résultats suivants pour le second opérande donné :

Opérateur Date Horodatage Interval Numérique
- Numérique Interval Date/Horodatage. Date
+ N/A N/A N/A N/A

Les opérations où le premier opérande est une timestamp produisent les résultats suivants pour le second opérande donné :

Opérateur Date Horodatage Interval Numérique
- Numérique Interval Horodatage Horodatage
+ N/A N/A N/A N/A

Styles d’intervalle

  • postgres : suit le style PostgreSQL. Il s’agit de l’option par défaut.

  • postgres_verbose : suit le style détaillé PostgreSQL.

  • sql_standard : suit le style des littéraux interval SQL standard.

La commande suivante définit le style d’intervalle sur sql_standard.

SET IntervalStyle to 'sql_standard';

format de sortie postgres

Le format de sortie pour le style d’intervalle postgres est le suivant. Chaque valeur numérique peut être négative.

'<numeric> <unit> [, <numeric> <unit> ...]'
select INTERVAL '1-2' YEAR TO MONTH::text varchar --------------- 1 year 2 mons
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::text varchar ------------------ 1 day 02:03:04.5678

format de sortie postgres_verbose

La syntaxe postgres_verbose est similaire à postgres, mais les sorties postgres_verbose contiennent également l’unité de temps.

'[@] <numeric> <unit> [, <numeric> <unit> ...] [direction]'
select INTERVAL '1-2' YEAR TO MONTH::text varchar ----------------- @ 1 year 2 mons
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::text varchar --------------------------- @ 1 day 2 hours 3 mins 4.56 secs

format de sortie sql_standard

Les valeurs interval year to month sont formatées comme suit. La spécification d’un signe négatif avant l’intervalle indique que l’intervalle est une valeur négative et s’applique à l’ensemble de l’intervalle.

'[-]yy-mm'

Les valeurs interval day to second sont formatées comme suit.

'[-]dd hh:mm:ss.ffffff'
SELECT INTERVAL '1-2' YEAR TO MONTH::text varchar ------- 1-2
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::text varchar --------------- 1 2:03:04.5678

Exemples de type de données interval

Les exemples suivants montrent comment utiliser les types de données INTERVAL avec des tables.

create table sample_intervals (y2m interval month, h2m interval hour to minute); insert into sample_intervals values (interval '20' month, interval '2 days 1:1:1.123456' day to second); select y2m::text, h2m::text from sample_intervals; y2m | h2m ---------------+----------------- 1 year 8 mons | 2 days 01:01:00
update sample_intervals set y2m = interval '2' year where y2m = interval '1-8' year to month; select * from sample_intervals; y2m | h2m ---------+----------------- 2 years | 2 days 01:01:00
delete from sample_intervals where h2m = interval '2 1:1:0' day to second; select * from sample_intervals; y2m | h2m -----+-----

Exemples de littéraux interval

Les exemples suivants sont exécutés avec le style d’intervalle défini sur postgres.

L’exemple suivant montre comment créer un littéral INTERVAL de 1 an.

select INTERVAL '1' YEAR intervaly2m --------------- 1 years 0 mons

Si vous spécifiez une quoted-string qui dépasse le qualificatif, les unités de temps restantes sont tronquées par rapport à l’intervalle. Dans l’exemple suivant, un intervalle de 13 mois devient 1 an et 1 mois, mais le mois restant est omis en raison du qualificatif YEAR.

select INTERVAL '13 months' YEAR intervaly2m --------------- 1 years 0 mons

Si vous utilisez un qualificatif inférieur à votre chaîne d’intervalle, les unités restantes sont incluses.

select INTERVAL '13 months' MONTH intervaly2m --------------- 1 years 1 mons

Si vous spécifiez une précision dans votre intervalle, le nombre de chiffres fractionnaires est tronqué à la précision spécifiée.

select INTERVAL '1.234567' SECOND (3) intervald2s -------------------------------- 0 days 0 hours 0 mins 1.235 secs

Si vous ne spécifiez aucune précision, AWS Clean Rooms utilise la précision maximale de 6.

select INTERVAL '1.23456789' SECOND intervald2s ----------------------------------- 0 days 0 hours 0 mins 1.234567 secs

L’exemple suivant montre comment créer un intervalle par plage.

select INTERVAL '2:2' MINUTE TO SECOND intervald2s ------------------------------ 0 days 0 hours 2 mins 2.0 secs

Les qualificatifs dictent les unités que vous spécifiez. Par exemple, même si l'exemple suivant utilise la même chaîne entre guillemets de « 2:2 » que l'exemple précédent, il AWS Clean Rooms reconnaît qu'il utilise des unités de temps différentes en raison du qualificatif.

select INTERVAL '2:2' HOUR TO MINUTE intervald2s ------------------------------ 0 days 2 hours 2 mins 0.0 secs

Les abréviations et les pluriels de chaque unité sont également pris en charge. Par exemple, 5s, 5 second et 5 seconds sont des intervalles équivalents. Les unités prises en charge sont les années, les mois, les heures, les minutes et les secondes.

select INTERVAL '5s' SECOND intervald2s ------------------------------ 0 days 0 hours 0 mins 5.0 secs
select INTERVAL '5 HOURS' HOUR intervald2s ------------------------------ 0 days 5 hours 0 mins 0.0 secs
select INTERVAL '5 h' HOUR intervald2s ------------------------------ 0 days 5 hours 0 mins 0.0 secs