Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :
Databricks SQL
Databricks Runtime
Retourne la soustraction de expr2 à partir de expr1.
Syntaxe
expr1 - expr2
Arguments
-
expr1: expression numérique, DATE, TIMESTAMP ou INTERVAL. -
expr2: le type accepté dépend du type deexpr:- Si
expr1est une valeur numérique,expr2doit être une expression numérique - Si
expr1est un intervalle année-mois ou jour-temps,expr2doit être de la classe d’intervalle correspondante. - Dans le cas contraire,
expr2doit être une valeur DATE ou TIMESTAMP.
- Si
Retours
Le type de résultat est déterminé dans l’ordre suivant :
- Si
expr1est un nombre, le résultat est le type maximal commun des arguments. - Si
expr1est de type DATE et queexpr2est un intervalle de jour-heure, le résultat est de type TIMESTAMP. - Si
expr1est de type TIMESTAMP etexpr2est un intervalle, le résultat est de type TIMESTAMP. - Si
expr1etexpr2sont de type DATE, le résultat est unINTERVAL DAYS. - Si
expr1ouexpr2sont de type TIMESTAMP, le résultat est unINTERVAL DAY TO SECOND. - Si
expr1etexpr2sont des intervalles d’année-mois, le résultat est un intervalle d’année-mois qui correspond à des unités suffisamment grandes pour représenter le résultat. - Si
expr1etexpr2sont des intervalles de jour-heure, le résultat est un intervalle de jour-heure qui correspond à des unités suffisamment grandes pour représenter le résultat. - Sinon, le type de résultat correspond à
expr1.
Si les deux expressions sont des intervalles, elles doivent être de la même classe.
Lorsque vous soustrait un intervalle d’un mois d’une date, Azure Databricks garantit que la date résultante est bien formée.
Si le résultat dépasse le type de résultat, Azure Databricks déclenche une erreur ARITHMETIC_OVERFLOW ou INTERVAL_ARITHMETIC_OVERFLOW.
Utilisez try_subtract pour retourner NULL en cas de dépassement de capacité.
Avertissement
Dans Databricks Runtime, si spark.sql.ansi.enabled est false, un dépassement ne provoque pas d’erreur, mais « enveloppe » le résultat à la place.
Conditions d’erreur courantes
Exemples
> SELECT 2 - 1;
1
> SELECT DATE'2021-03-20' - INTERVAL '2' MONTH
2021-1-20
> SELECT TIMESTAMP'2021-03-20 12:15:29' - INTERVAL '3' SECOND
2021-03-20 12:15:26
> SELECT typeof(INTERVAL '3' DAY - INTERVAL '2' HOUR);
interval day to hour
> SELECT typeof(current_date - (current_date + INTERVAL '1' DAY));
interval day
> SELECT typeof(current_timestamp - (current_date + INTERVAL '1' DAY));
interval day to second
> SELECT DATE'2021-03-31' - INTERVAL '1' MONTH;
2021-02-28
> SELECT -100Y - 100Y;
Error: ARITHMETIC_OVERFLOW