Hologres prend en charge les fonctions de date et d'heure suivantes pour la conversion de type, les opérations arithmétiques, l'extraction et la troncature de champs, ainsi que la récupération de la date ou de l'heure actuelle.
Aperçu des fonctions
Fonctions de conversion de type
| Fonction | Description | Exemple | Résultat |
|---|---|---|---|
| MAKE_DATE | Crée une date à partir des valeurs d'année, de mois et de jour. Plage horaire par défaut : 1925–2282. | MAKE_DATE(2013, 7, 15) |
2013-07-15 |
| TO_CHAR | Convertit un horodatage, un entier ou un nombre en chaîne. | TO_CHAR(current_timestamp, 'YYYY-MM-DD') |
2024-08-05 |
| TO_DATE | Convertit une chaîne en date. Plage horaire par défaut : 1925–2282. | TO_DATE('05 Dec 2000', 'DD Mon YYYY') |
2000-12-05 |
| TO_TIMESTAMP | Convertit une chaîne ou une heure Unix (epoch) en horodatage. Plage horaire par défaut : 1925–2282. | TO_TIMESTAMP(163280296) |
1975-03-06 03:38:16+08 |
Fonctions arithmétiques de date/heure
| Fonction | Description | Exemple | Résultat |
|---|---|---|---|
| ADD_MONTHS | Ajoute des mois à une date. Compatible Oracle ; nécessite l'extension orafce. |
ADD_MONTHS(current_date, 2) |
2024-10-05 |
| DATEADD | Ajoute ou soustrait un intervalle de temps à une date. Plage horaire par défaut : 1925–2282. Disponible dans les versions V2.0.31–V2.1.0 et V2.1.13+. | DATEADD(a, 1, 'mm') |
2005-03-28 00:00:00 |
| DATEDIFF | Renvoie la différence entre deux dates ou horodatages dans une unité spécifiée. Plage horaire par défaut : 1925–2282. Disponible dans les versions V2.0.31–V2.1.0 et V2.1.13+. | DATEDIFF(a, '2005-03-02', 'mi') |
-2880 |
| MONTHS_BETWEEN | Renvoie le nombre de mois entre deux dates. Compatible Oracle ; nécessite l'extension orafce. |
MONTHS_BETWEEN('2022-01-01', '2021-11-01') |
2 |
| NEXT_DAY | Renvoie la date du premier jour de la semaine spécifié après une date donnée. Compatible Oracle ; nécessite l'extension orafce. |
NEXT_DAY('2022-05-01', 'FRIDAY') |
2022-05-06 |
| + | Additionne des valeurs de date et d'heure. | date '2001-09-28' + integer '7' |
2001-10-05 |
| - | Soustrait des valeurs de date et d'heure. | date '2001-10-01' - date '2001-09-28' |
3 |
| * | Multiplie un intervalle par un nombre. | 21 * interval '3 day' |
0 years 0 mons 63 days 0 hours 0 mins 0.0 secs |
| / | Divise un intervalle par un nombre. | interval '1 hour' / 1.5 |
0 years 0 mons 0 days 0 hours 40 mins 0.0 secs |
Extraction et troncature de champs de date/heure
| Fonction | Description | Exemple | Résultat |
|---|---|---|---|
| DATE_PART | Extrait un sous-champ d'un horodatage. Équivalent à EXTRACT. |
DATE_PART('hour', timestamp '2001-02-16 16:38:40') |
16 |
| DATE_TRUNC | Tronque un horodatage à une précision spécifiée. | DATE_TRUNC('day', timestamptz '2001-02-16 20:38:40+08') |
2001-02-16 00:00:00+08 |
| EXTRACT | Extrait un sous-champ d'un horodatage. Équivalent à DATE_PART. |
EXTRACT(hour FROM timestamp '2001-02-16 20:38:40') |
20 |
| LAST_DAY | Renvoie le dernier jour du mois. Plage horaire par défaut : 1925–2282. Disponible dans les versions V2.0.31–V2.1.0 et V2.1.13+. | LAST_DAY('2004-02-28') |
2004-02-29 |
| ORACLE_LAST_DAY | Renvoie le dernier jour du mois. Compatible Oracle ; nécessite l'extension orafce. |
ORACLE_LAST_DAY('2022-05-01') |
2022-05-31 |
| ROUND | Arrondit une date à l'unité de temps la plus proche. Compatible Oracle ; nécessite l'extension orafce. |
ROUND('2022-07-22'::date, 'Y') |
2023-01-01 |
| TRUNC | Tronque une date ou un horodatage à une précision spécifiée. Compatible Oracle ; nécessite l'extension orafce. |
TRUNC('2022-05-22'::date, 'Y') |
2022-01-01 |
Fonctions de date/heure actuelles
| Fonction | Description | Type de retour |
|---|---|---|
| CLOCK_TIMESTAMP() | Renvoie l'heure réelle actuelle. La valeur change à chaque appel, même au sein d'une seule instruction. | TIMESTAMPTZ |
| CURRENT_DATE | Renvoie la date actuelle au début de la transaction. | DATE |
| CURRENT_TIMESTAMP | Renvoie l'horodatage au début de la transaction. Équivalent à TRANSACTION_TIMESTAMP() et NOW(). | TIMESTAMPTZ |
| LOCALTIMESTAMP | Renvoie l'horodatage au début de la transaction, sans fuseau horaire. | TIMESTAMP |
| NOW() | Renvoie l'horodatage au début de la transaction. Équivalent à CURRENT_TIMESTAMP et TRANSACTION_TIMESTAMP(). | TIMESTAMPTZ |
| STATEMENT_TIMESTAMP() | Renvoie l'horodatage au début de l'instruction actuelle. | TIMESTAMPTZ |
| TIMEOFDAY() | Renvoie l'heure réelle actuelle sous forme de chaîne de texte formatée. | TEXT |
| TRANSACTION_TIMESTAMP() | Renvoie l'horodatage au début de la transaction. Équivalent à CURRENT_TIMESTAMP et NOW(). |
TIMESTAMPTZ |
Autres fonctions
| Fonction | Description | Exemple | Résultat |
|---|---|---|---|
| ISFINITE | Vérifie si une date ou un horodatage est fini (ni infinity ni -infinity). |
ISFINITE(date '2001-02-16') |
t |
Parties et unités de date prises en charge
Le tableau suivant présente les valeurs de partie de date acceptées par DATEADD, DATEDIFF, DATE_PART, DATE_TRUNC et EXTRACT. Toutes les parties ne s'appliquent pas à chaque fonction.
| Partie de date | Abréviations | DATEADD | DATEDIFF | DATE_PART / EXTRACT | DATE_TRUNC |
|---|---|---|---|---|---|
year |
yyyy, yy |
✓ | ✓ | ✓ | ✓ |
quarter |
— | — | — | ✓ | ✓ |
month |
mm, mon |
✓ | ✓ | ✓ | ✓ |
week |
— | — | — | ✓ | ✓ |
day |
dd |
✓ | ✓ | ✓ | ✓ |
hour |
hh |
✓ | ✓ | ✓ | ✓ |
minute |
mi |
✓ | ✓ | ✓ | ✓ |
second |
ss |
✓ | ✓ | ✓ | ✓ |
century |
— | — | — | ✓ | ✓ |
decade |
— | — | — | ✓ | ✓ |
dow |
— | — | — | ✓ (0=dimanche) | — |
isodow |
— | — | — | ✓ (7=dimanche) | — |
doy |
— | — | — | ✓ | — |
epoch |
— | — | — | ✓ | — |
Prise en charge étendue de la plage horaire (paramètre GUC)
Par défaut, TO_CHAR, TO_DATE et TO_TIMESTAMP prennent en charge les dates dans la plage 1925–2282. Pour prendre en charge toutes les plages horaires, exécutez l'une des instructions suivantes avant votre requête SQL.
Disponible dans Hologres V1.1.31 et versions ultérieures :
SET hg_experimental_functions_use_pg_implementation = 'to_char';
SET hg_experimental_functions_use_pg_implementation = 'to_date';
SET hg_experimental_functions_use_pg_implementation = 'to_timestamp';
-- Or enable all three at once:
SET hg_experimental_functions_use_pg_implementation = 'to_char,to_date,to_timestamp';
La définition de ce paramètre GUC dégrade les performances des requêtes d'environ 50 %. Dans Hologres V1.1.42 et versions ultérieures, l'impact sur les performances est réduit à environ 20 %.
Fonctions de conversion de type
TO_CHAR
Convertit un horodatage, un entier ou un nombre en chaîne.
Syntaxe
TO_CHAR(TIMESTAMP | TIMESTAMPTZ, TEXT)
TO_CHAR(INT, TEXT)
TO_CHAR(DOUBLE PRECISION, TEXT)
Type de retour : TEXT
Notes d'utilisation
Prend en charge les formats 24 heures (
HH24) et 12 heures (HH12). Le format par défaut est 12 heures.Spécificateurs de format courants :
YYYY(année),MM(mois),DD(jour),HH(heure),MI(minute),SS(seconde).Pour les horodatages avec fuseau horaire (
TIMESTAMPTZ) : si aucun fuseau horaire n'est spécifié, la valeur est convertie vers le fuseau horaire du système (UTC+8 par défaut) avant le formatage. UtilisezAT TIME ZONEpour convertir vers un autre fuseau horaire.Pour étendre la plage horaire prise en charge au-delà de 1925–2282, consultez la section Prise en charge étendue de la plage horaire.
Exemples
Convertir un horodatage au format 24 heures :
-- Returns: 13:48:30
SELECT TO_CHAR(current_timestamp, 'HH24:MI:SS');
-- Returns: 2024-08-05
SELECT TO_CHAR(current_timestamp, 'YYYY-MM-DD');
Convertir un horodatage au format 12 heures :
-- Returns: 01:50:42 PM
SELECT TO_CHAR(current_timestamp, 'HH12:MI:SS AM');
-- Returns: 12:30:00 AM
SELECT TO_CHAR(time '00:30:00', 'HH12:MI:SS AM');
Convertir une colonne TIMESTAMPTZ — la valeur est convertie vers le fuseau horaire du système (UTC+8) par défaut :
CREATE TABLE time_test(a TEXT, b TIMESTAMPTZ);
INSERT INTO time_test VALUES ('2001-09-28 03:00:00', '2004-10-19 10:23:54+08');
-- Returns: 10:23:54
SELECT TO_CHAR(b, 'HH24:MI:SS') FROM time_test;
Convertir une colonne TIMESTAMPTZ vers un fuseau horaire spécifique à l'aide de AT TIME ZONE :
CREATE TABLE timestamptz_test(a TIMESTAMPTZ);
INSERT INTO timestamptz_test VALUES ('2023-03-21 10:23:54+02');
-- Without a time zone override: converted to system time zone (UTC+8). Returns: 2023-03-21 16:23:54
SELECT TO_CHAR(a, 'YYYY-MM-DD HH24:MI:SS') FROM timestamptz_test;
-- With the US/Eastern time zone. Returns: 2023-03-21 04:23:54
SELECT TO_CHAR(a AT TIME ZONE 'US/Eastern', 'YYYY-MM-DD HH24:MI:SS') FROM timestamptz_test;
Convertir un entier en chaîne :
-- Returns: 125
SELECT TO_CHAR(125, '999');
Convertir un nombre à double précision en chaîne :
-- Returns: 125.8
SELECT TO_CHAR(125.8::real, '999D9');
TO_DATE
Convertit une chaîne en date. Plage horaire par défaut : 1925–2282.
Syntaxe
TO_DATE(<text_date> TEXT, <format_mask> TEXT)
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
text_date |
Oui | La chaîne à convertir. |
format_mask |
Oui | Le format de date de la chaîne d'entrée. |
Type de retour : DATE
Notes d'utilisation
Pour étendre la plage horaire prise en charge au-delà de 1925–2282, consultez la section Prise en charge étendue de la plage horaire.
Exemples
Convertir une chaîne en date :
-- Returns: 2000-12-05
SELECT TO_DATE('05 Dec 2000', 'DD Mon YYYY');
-- Returns: 2001-03-24
SELECT TO_DATE('2001 03 24', 'YYYY-MM-DD');
Convertir une colonne TEXT en date :
CREATE TABLE time_test(a TEXT);
INSERT INTO time_test VALUES ('2001-09-28 03:00:00');
SELECT TO_DATE(a, 'YYYY-MM-DD') FROM time_test;
Résultat :
to_date
------------
2001-09-28
TO_TIMESTAMP
Convertit une chaîne ou une heure Unix (epoch) en valeur TIMESTAMPTZ. Plage horaire par défaut : 1925–2282.
Syntaxe
-- Convert a string to a timestamp
TO_TIMESTAMP(<text_date> TEXT, <format_mask> TEXT)
-- Convert a Unix epoch time (seconds since 1970-01-01 00:00:00 UTC) to a timestamp
TO_TIMESTAMP(DOUBLE PRECISION)
Type de retour : TIMESTAMPTZ
Notes d'utilisation
Le résultat inclut le décalage de fuseau horaire (par exemple,
+08).Pour étendre la plage horaire prise en charge au-delà de 1925–2282, consultez la section Prise en charge étendue de la plage horaire.
Exemples
Convertir une chaîne en horodatage :
SELECT TO_TIMESTAMP('05 Dec 2000', 'DD Mon YYYY');
Résultat :
to_timestamp
------------------------
2000-12-05 00:00:00+08
Convertir une colonne TEXT en horodatage :
CREATE TABLE time_test(a TEXT);
INSERT INTO time_test VALUES ('2001-09-28 03:00:00');
SELECT TO_TIMESTAMP(a, 'YYYY-MM-DD') FROM time_test;
Résultat :
to_timestamp
------------------------
2001-09-28 00:00:00+08
Convertir une heure Unix en secondes :
-- Returns: 1975-03-06 03:38:16+08
SELECT TO_TIMESTAMP(163280296);
Convertir une heure Unix en millisecondes (divisez d'abord par 1000) :
-- Returns: 2021-09-28 12:22:41+08
SELECT TO_TIMESTAMP(1632802961000 / 1000);
MAKE_DATE
Crée une date à partir de valeurs entières d'année, de mois et de jour. Plage horaire par défaut : 1925–2282.
Syntaxe
MAKE_DATE(<year> INT, <month> INT, <day> INT)
Type de retour : DATE
Notes d'utilisation
Disponible dans Hologres V2.0.29 et versions ultérieures. Dans les opérations d'écriture, les arguments ne peuvent pas tous être des constantes.
Exemple
-- Returns: 2013-07-15
SELECT MAKE_DATE(2013, 7, 15);
Résultat :
make_date
------------
2013-07-15
Fonctions arithmétiques de date/heure
DATEADD
Ajoute ou soustrait un intervalle de temps à une date. Plage horaire par défaut : 1925–2282.
Syntaxe
DATEADD(<d> DATE | TIMESTAMP | TIMESTAMPTZ, <num> BIGINT, <str> TEXT)
Paramètres
| Paramètre | Description |
|---|---|
d |
La valeur de date ou d'heure de base. |
num |
Le nombre d'unités à ajouter (positif) ou à soustraire (négatif). |
str |
L'unité de temps. Consultez la section Parties et unités de date prises en charge pour connaître les valeurs valides. |
Type de retour : Identique au type d'entrée (DATE, TIMESTAMP ou TIMESTAMPTZ).
Notes d'utilisation
Disponible dans les versions Hologres V2.0.31–V2.1.0 et V2.1.13 et ultérieures.
Dans les opérations d'écriture, les arguments ne peuvent pas tous être des constantes.
Exemple
Ajouter un mois à une colonne d'horodatage :
CREATE TABLE test_dateadd (a TIMESTAMP);
INSERT INTO test_dateadd VALUES ('2005-02-28 00:00:00');
SELECT DATEADD(a, 1, 'mm') FROM test_dateadd;
Résultat :
dateadd
---------------------
2005-03-28 00:00:00
ADD_MONTHS
Ajoute un nombre spécifié de mois à une date. Il s'agit d'une fonction compatible Oracle qui nécessite l'extension orafce. Pour plus d'informations, consultez la rubrique Fonctions Oracle prises en charge.
Syntaxe
ADD_MONTHS(<d> DATE, <month> INT)
Paramètres
| Paramètre | Description |
|---|---|
d |
La date de base. |
month |
Le nombre de mois à ajouter. |
Type de retour : DATE
Exemple
SELECT ADD_MONTHS(current_date, 2);
Résultat :
add_months
------------
2024-10-05
DATEDIFF
Renvoie la différence entre deux dates ou horodatages dans une unité spécifiée. Plage horaire par défaut : 1925–2282.
Syntaxe
DATEDIFF(<d1> DATE | TIMESTAMP | TIMESTAMPTZ, <d2> DATE | TIMESTAMP | TIMESTAMPTZ, <str> TEXT)
Paramètres
| Paramètre | Description |
|---|---|
d1 |
La première date ou le premier horodatage. |
d2 |
La deuxième date ou le deuxième horodatage. |
str |
L'unité de temps pour calculer la différence. Consultez la section Parties et unités de date prises en charge pour connaître les valeurs valides. |
Type de retour : BIGINT
Notes d'utilisation
Disponible dans les versions Hologres V2.0.31–V2.1.0 et V2.1.13 et ultérieures.
Dans les opérations d'écriture, les arguments ne peuvent pas tous être des constantes.
La fonction utilise une troncature par unité complète, et non un arrondi. Si la différence est inférieure à une unité complète, elle renvoie
0. Par exemple, la différence d'années entre2023-12-31et2024-01-01est0.-
Pour compter les franchissements de limites (renvoyant
1dans l'exemple précédent), exécutez l'instruction suivante avant votre requête :SET hg_experimental_datediff_use_presto_impl = off;
Exemple
Calculer la différence en minutes entre deux horodatages :
CREATE TABLE test_datediff (a TIMESTAMP);
INSERT INTO test_datediff VALUES ('2005-02-28 00:00:00');
SELECT DATEDIFF(a, '2005-03-02 00:00:00', 'mi') FROM test_datediff;
Résultat :
datediff
----------
-2880
MONTHS_BETWEEN
Renvoie le nombre de mois entre deux dates. Il s'agit d'une fonction compatible Oracle qui nécessite l'extension orafce. Pour plus d'informations, consultez la rubrique Fonctions Oracle prises en charge.
Syntaxe
MONTHS_BETWEEN(DATE, DATE)
Type de retour : INT
Exemples
-- Returns: 2
SELECT MONTHS_BETWEEN('2022-01-01', '2021-11-01');
-- Returns: -2
SELECT MONTHS_BETWEEN('2021-11-01', '2022-01-01');
NEXT_DAY
Renvoie la date du premier jour de la semaine spécifié qui suit une date donnée. Il s'agit d'une fonction compatible Oracle qui nécessite l'extension orafce. Pour plus d'informations, consultez la rubrique Fonctions Oracle prises en charge.
Syntaxe
NEXT_DAY(<d> DATE, <str> TEXT | INT)
Paramètres
| Paramètre | Description |
|---|---|
d |
La date de départ. |
str |
Le jour cible de la semaine, sous forme de chaîne (par exemple, Friday) ou d'un entier de 1 à 7, où 1 = dimanche et 2 = lundi. |
Type de retour : DATE
Exemples
-- Returns: 2022-05-06
SELECT NEXT_DAY('2022-05-01', 'FRIDAY');
-- Returns: 2022-05-06
SELECT NEXT_DAY('2022-05-01', 5);
Opérateurs arithmétiques
Les opérateurs suivants fonctionnent avec les valeurs de date et d'heure.
| Opérateur | Opérande gauche | Opérande droit | Description | Exemple | Résultat |
|---|---|---|---|---|---|
+ | DATE | INTEGER | Ajoute des jours à une date. | date '2001-09-28' + integer '7' | 2001-10-05 |
+ | DATE | TIME | Combine une date et une heure pour produire un horodatage. | date '2001-09-28' + time '03:00' | 2001-09-28 03:00:00 |
+ | DATE | INTERVAL | Ajoute un intervalle à une date. | date '2001-09-28' + interval '1 hour' | 2001-09-28 01:00:00 |
+ | TIMESTAMPTZ | INTERVAL | Ajoute un intervalle à un horodatage. | now() + interval '1 day' | 2022-12-08 20:09:19+08 |
- | DATE | DATE | Renvoie le nombre de jours entre deux dates sous forme d'entier. | date '2001-10-01' - date '2001-09-28' | 3 |
- | DATE | INTEGER | Soustrait des jours d'une date. | date '2001-10-01' - integer '7' | 2001-09-24 |
- | DATE | TIME | Soustrait une heure d'une date, produisant un horodatage. | date '2001-09-28' - time '03:00' | 2001-09-27 21:00:00 |
- | DATE | INTERVAL | Soustrait un intervalle d'une date. | date '2001-09-28' - interval '1 hour' | 2001-09-27 23:00:00 |
- | TIMESTAMPTZ | INTERVAL | Soustrait un intervalle d'un horodatage. | now() - interval '2 day' | 2022-12-06 20:27:21+08 |
* | INTEGER | INTERVAL | Multiplie un intervalle. | 21 * interval '3 day' | 0 years 0 mons 63 days 0 hours 0 mins 0.0 secs |
/ | INTERVAL | DOUBLE PRECISION | Divise un intervalle. | interval '1 hour' / double precision '1.5' | 0 years 0 mons 0 days 0 hours 40 mins 0.0 secs |
Extraction et troncature de champs de date/heure
EXTRACT
Extrait un sous-champ (tel que l'année, le mois ou le jour) d'une expression d'horodatage. EXTRACT est équivalent à DATE_PART.
Syntaxe
EXTRACT(field FROM TIMESTAMP)
Type de retour : DOUBLE PRECISION
Notes d'utilisation
Valeurs valides pour field : century, day, decade, dow (jour de la semaine, 0=dimanche), isodow (jour de la semaine, 7=dimanche), doy (jour de l'année), epoch, hour, minute, month, quarter, second, week, year.
Exemples
Extraire l'heure d'un horodatage :
-- Returns: 20
SELECT EXTRACT(hour FROM timestamp '2001-02-16 20:38:40');
Extraire la minute de l'heure actuelle :
-- Returns: 12
SELECT EXTRACT(minute FROM NOW());
Obtenir l'heure Unix (secondes depuis 1970-01-01 00:00:00 UTC) :
CREATE TABLE time_test(a TEXT);
INSERT INTO time_test VALUES ('2001-09-28 03:00:00');
SELECT EXTRACT(epoch FROM to_timestamp(a, 'YYYY-MM-DD')) FROM time_test;
Résultat :
date_part
------------
1001606400
Fonctions d'extraction optimisées pour les performances
À partir de Hologres V4.0, les fonctions suivantes sont prises en charge pour une meilleure compatibilité avec ClickHouse et Doris. Elles ont la même sémantique que EXTRACT(<field> FROM timestamp) mais offrent de meilleures performances. Ces fonctions ne prennent pas en charge les arguments composés uniquement de constantes.
| Fonction | Alias | Équivalent à |
|---|---|---|
extract_century(timestamp) |
— | extract(century from timestamp) |
extract_day(timestamp) |
toDayOfMonth, day |
extract(day from timestamp) |
extract_decade(timestamp) |
— | extract(decade from timestamp) |
extract_dow(timestamp) |
— | extract(dow from timestamp) |
extract_doy(timestamp) |
toDayOfYear, dayofyear |
extract(doy from timestamp) |
extract_hour(timestamp) |
toHour, hour |
extract(hour from timestamp) |
extract_isodow(timestamp) |
dayofweek_iso |
extract(isodow from timestamp) |
extract_isoweek(timestamp) |
toIsoWeek, week_iso |
extract(week from timestamp) |
extract_minute(timestamp) |
toMinute, minute |
extract(minute from timestamp) |
extract_month(timestamp) |
toMonth, month |
extract(month from timestamp) |
extract_quarter(timestamp) |
toQuarter, quarter |
extract(quarter from timestamp) |
extract_second(timestamp) |
toSecond, second |
extract(second from timestamp) |
extract_year(timestamp) |
toYear, year |
extract(year from timestamp) |
DATE_PART
Extrait un sous-champ d'un horodatage. DATE_PART est équivalent à EXTRACT.
Syntaxe
DATE_PART(<str> TEXT, <d> TIMESTAMP)
Paramètres
| Paramètre | Description |
|---|---|
str |
Le sous-champ à extraire. Valeurs valides : century, day, decade, dow, isodow, doy, epoch, hour, minute, month, quarter, second, week, year. |
d |
L'expression de date/heure. |
Type de retour : DOUBLE PRECISION
Exemples
Obtenir l'heure d'un horodatage :
SELECT DATE_PART('hour', timestamp '2001-02-16 16:38:40');
Résultat :
date_part
-----------
16
Obtenir le numéro de semaine ISO pour une date :
SELECT DATE_PART('week', TO_DATE('2022-10-11', 'YYYY-MM-DD'));
Résultat :
date_part
-----------
41
Obtenir le numéro de mois pour une date :
SELECT DATE_PART('month', TO_DATE('2022-10-11', 'YYYY-MM-DD'));
Résultat :
date_part
-----------
10
DATE_TRUNC
Tronque une valeur de date ou d'heure à une précision spécifiée.
Syntaxe
DATE_TRUNC(<str> TEXT, <d> TIME | TIMESTAMP | TIMESTAMPTZ)
Paramètres
| Paramètre | Description |
|---|---|
str |
La précision de troncature. Valeurs valides : century, decade, year, quarter, month, week, day, hour, minute, second. |
d |
La valeur de date ou d'heure à tronquer. |
Type de retour : TIMESTAMP ou TIMESTAMPTZ (correspond au type d'entrée).
Exemples
Tronquer une heure à l'heure près :
SELECT DATE_TRUNC('hour', time '12:38:40');
Résultat :
date_trunc
------------
12:00:00
Tronquer un horodatage au jour près :
SELECT DATE_TRUNC('day', timestamptz '2001-02-16 20:38:40+08');
Résultat :
date_trunc
------------------------
2001-02-16 00:00:00+08
Tronquer un horodatage au mois près :
SELECT DATE_TRUNC('month', timestamp '2001-02-16 18:38:40');
Résultat :
date_trunc
---------------------
2001-02-01 00:00:00
Obtenir le premier jour du mois actuel à 12 h 00 :
SELECT DATE_TRUNC('month', now()) + interval '12h';
Résultat :
?column?
---------------------
2024-08-01 12:00:00+08
Obtenir 09 h 00 le jour actuel :
SELECT DATE_TRUNC('day', now()) + interval '9h';
Résultat :
?column?
------------------------
2024-08-08 09:00:00+08
Obtenir le début du même jour de la semaine suivante :
SELECT DATE_TRUNC('day', now()) + interval '7d';
Résultat :
?column?
------------------------
2024-08-15 00:00:00+08
LAST_DAY
Renvoie le dernier jour du mois pour une date spécifiée. Plage horaire par défaut : 1925–2282.
Syntaxe
LAST_DAY(DATE | TIMESTAMP | TIMESTAMPTZ)
Type de retour : DATE
Notes d'utilisation
Disponible dans les versions Hologres V2.0.31–V2.1.0 et V2.1.13 et ultérieures.
Dans les opérations d'écriture, les arguments ne peuvent pas tous être des constantes.
Exemple
CREATE TABLE test_last_day (a TIMESTAMP);
INSERT INTO test_last_day VALUES ('2004-02-28 00:00:00');
SELECT LAST_DAY(a) FROM test_last_day;
Résultat :
last_day
------------
2004-02-29
ORACLE_LAST_DAY
Renvoie le dernier jour du mois pour une date spécifiée. Il s'agit d'une fonction compatible Oracle qui nécessite l'extension orafce. Plage horaire par défaut : 1925–2282. Pour plus d'informations, consultez la rubrique Fonctions Oracle prises en charge.
Syntaxe
ORACLE_LAST_DAY(DATE)
Type de retour : DATE
Exemple
SELECT ORACLE_LAST_DAY('2022-05-01');
Résultat :
oracle_last_day
-----------------
2022-05-31
TRUNC
Tronque une date ou un horodatage à une précision spécifiée. Il s'agit d'une fonction compatible Oracle qui nécessite l'extension orafce. Pour plus d'informations, consultez la rubrique Fonctions Oracle prises en charge.
Syntaxe
TRUNC(<d> DATE | TIMESTAMP [, <str> TEXT])
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
d |
Oui | La valeur de date ou d'heure à tronquer. Si une valeur TIMESTAMPTZ est transmise, la partie horaire est définie sur 00:00:00. |
str |
Non | La précision de troncature. La valeur par défaut est le jour si omise. Y renvoie le premier jour de l'année ; Q renvoie le premier jour du trimestre. Pour toutes les valeurs prises en charge, consultez la documentation Oracle. |
Type de retour : DATE ou TIMESTAMP
Exemples
Tronquer une date au début de l'année :
SELECT TRUNC('2022-05-22'::date, 'Y');
Résultat :
trunc
------------
2022-01-01
Tronquer un horodatage au début de l'année :
SELECT TRUNC('2022-05-22 13:11:22'::timestamp, 'Y');
Résultat :
trunc
---------------------
2022-01-01 00:00:00
Tronquer un horodatage au début du trimestre :
SELECT TRUNC('2022-05-22 13:11:22'::timestamp, 'Q');
Résultat :
trunc
---------------------
2022-04-01 00:00:00
Tronquer un horodatage au début du jour (par défaut) :
SELECT TRUNC('2022-05-22 13:11:22'::timestamp);
Résultat :
trunc
---------------------
2022-05-22 00:00:00
ROUND
Arrondit une date ou un horodatage à l'unité de temps la plus proche. Il s'agit d'une fonction compatible Oracle qui nécessite l'extension orafce. Pour plus d'informations, consultez la rubrique Fonctions Oracle prises en charge.
Syntaxe
ROUND(<d> DATE | TIMESTAMPTZ [, <str> TEXT])
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
d |
Oui | La valeur de date ou d'heure à arrondir. |
str |
Non | L'unité de temps vers laquelle arrondir. La valeur par défaut est le jour si omise. Y arrondit au premier jour de l'année la plus proche. Pour toutes les valeurs prises en charge, consultez la documentation Oracle. |
Type de retour : DATE ou TIMESTAMP
Exemples
Arrondir une date à l'année la plus proche (avant le 1er juillet — arrondi vers le bas) :
SELECT ROUND('2022-05-22'::date, 'Y');
Résultat :
round
------------
2022-01-01
Arrondir une date à l'année la plus proche (après le 1er juillet — arrondi vers le haut) :
SELECT ROUND('2022-07-22'::date, 'Y');
Résultat :
round
------------
2023-01-01
Arrondir un horodatage à l'année la plus proche :
SELECT ROUND('2022-07-22 13:11:22'::timestamp, 'Y');
Résultat :
round
---------------------
2023-01-01 00:00:00
Arrondir un horodatage au jour le plus proche (par défaut) :
SELECT ROUND('2022-02-22 13:11:22'::timestamp);
Résultat :
round
---------------------
2022-02-23 00:00:00
Fonctions de date/heure actuelles
CURRENT_DATE
Renvoie la date actuelle au début de la transaction.
Syntaxe
CURRENT_DATE
Type de retour : DATE
Exemple
SELECT CURRENT_DATE;
Résultat :
current_date
--------------
2024-08-08
CURRENT_TIMESTAMP
Renvoie l'horodatage au début de la transaction actuelle. Équivalent à TRANSACTION_TIMESTAMP() et NOW().
Syntaxe
CURRENT_TIMESTAMP
La valeur renvoyée ne change pas au sein d'une seule transaction.
Type de retour : TIMESTAMPTZ
Exemple
SELECT CURRENT_TIMESTAMP;
Résultat :
current_timestamp
-------------------------------
2024-08-08 14:55:11.006068+08
CLOCK_TIMESTAMP
Renvoie l'heure réelle actuelle.
Syntaxe
clock_timestamp()
Contrairement àCURRENT_TIMESTAMPetNOW(), la valeur renvoyée change à chaque appel, même au sein d'une seule instruction SQL.
Type de retour : TIMESTAMPTZ
Exemple
SELECT clock_timestamp();
Résultat :
clock_timestamp
-------------------------------
2024-08-08 14:57:43.569109+08
LOCALTIMESTAMP
Renvoie l'horodatage au début de la transaction actuelle, sans information de fuseau horaire.
Syntaxe
LOCALTIMESTAMP
Type de retour : TIMESTAMP
Exemple
SELECT LOCALTIMESTAMP;
Résultat :
localtimestamp
---------------------------
2024-08-08 15:00:59.13245
NOW
Renvoie l'horodatage au début de la transaction actuelle. Équivalent à CURRENT_TIMESTAMP et TRANSACTION_TIMESTAMP().
Syntaxe
NOW()
La valeur renvoyée ne change pas au sein d'une seule transaction.
Type de retour : TIMESTAMPTZ
Exemple
SELECT NOW();
Résultat :
now
-------------------------------
2024-08-08 15:02:50.270501+08
STATEMENT_TIMESTAMP
Renvoie l'horodatage au début de l'instruction actuelle.
Syntaxe
STATEMENT_TIMESTAMP()
La valeur est cohérente au sein d'une seule instruction, mais diffère selon les instructions au sein de la même transaction.
Type de retour : TIMESTAMPTZ
Exemple
SELECT STATEMENT_TIMESTAMP();
Résultat :
statement_timestamp
-------------------------------
2024-08-08 15:06:14.772939+08
TIMEOFDAY
Renvoie l'heure réelle actuelle sous forme de chaîne de texte formatée. Similaire à CLOCK_TIMESTAMP(), mais renvoie une valeur TEXT au lieu de TIMESTAMPTZ.
Syntaxe
TIMEOFDAY()
Type de retour : TEXT
Exemple
SELECT TIMEOFDAY();
Résultat :
timeofday
-------------------------------------
Thu Aug 08 15:08:16.599369 2024 CST
TRANSACTION_TIMESTAMP
Renvoie l'horodatage au début de la transaction actuelle. Équivalent à CURRENT_TIMESTAMP et NOW().
Syntaxe
TRANSACTION_TIMESTAMP()
La valeur renvoyée ne change pas au sein d'une seule transaction.
Type de retour : TIMESTAMPTZ
Exemple
SELECT TRANSACTION_TIMESTAMP();
Résultat :
transaction_timestamp
-------------------------------
2024-08-08 15:11:10.329005+08
Autres fonctions
ISFINITE
Vérifie si une date ou un horodatage est fini (ni infinity ni -infinity).
Syntaxe
ISFINITE(DATE)
ISFINITE(TIMESTAMP)
Type de retour : BOOLEAN — renvoie t si fini, f si infini.
Exemples
SELECT ISFINITE(date '2001-02-16');
Résultat :
isfinite
----------
t
SELECT ISFINITE(timestamp '2001-02-16 21:28:30');
Résultat :
isfinite
----------
t
Exemples
Les exemples suivants illustrent des opérations courantes de date et d'heure dans Hologres.
Ajouter 2 heures à l'horodatage actuel :
SELECT NOW() + interval '2 hour';
Résultat :
?column?
-------------------------------
2022-12-29 13:43:58.321104+08
Obtenir l'heure Unix pour l'horodatage actuel :
SELECT EXTRACT(epoch FROM current_timestamp);
Résultat :
date_part
---------------------
1672285506.296279
Ajouter une valeur DATE et une colonne entière représentant des mois :
CREATE TABLE date_test1(a DATE, b INT);
INSERT INTO date_test1 VALUES ('2021-09-28', '12');
SELECT a + (b || ' month')::interval FROM date_test1;
Résultat :
?column?
--------------------
2022-09-28 00:00:00
Convertir une chaîne numérique en horodatage à l'aide de TO_CHAR et TO_TIMESTAMP :
SELECT TO_TIMESTAMP(TO_CHAR(20211027172045, '9999-99-99 99:99:99'), 'YYYY-MM-DD HH24:MI:SS');
Résultat :
to_timestamp
----------------------
2021-10-27 17:20:45+08
Extraire le mois de l'horodatage actuel :
SELECT EXTRACT(mon FROM now());
Résultat :
date_part
-----------
12
Diviser deux entiers avec une précision décimale (convertir d'abord en float) :
-- Integer division discards the remainder: 10/3 = 3
-- Cast to float to get a decimal result
SELECT 10 / 3::float;
Résultat :
?column?
---------
3.3333333333333335