-
Operator (minustecken)
Gäller för: Databricks SQL Databricks Runtime
Returnerar subtraktionen för expr2
från expr1
.
Syntax
expr1 - expr2
Argument
expr1
: Ett numeriskt uttryck, DATUM, TIDSSTÄMPEL eller INTERVALL-uttryck.expr2
: Den godkända typen beror på typen avexpr
:- Om
expr1
är ett numerisktexpr2
måste vara numeriskt uttryck - Om
expr1
är ett års- eller dagtidsintervallexpr2
måste vara av den matchande intervallklassen. - Annars
expr2
måste vara en DATE eller TIMESTAMP.
- Om
Returer
Resultattypen bestäms i följande ordning:
- Om
expr1
är ett numeriskt värde är resultatet den vanligaste maximala typen av argument. - Om
expr1
är ett DATUM ochexpr2
är ett dagtidsintervall är resultatet en TIMESTAMP. - Om
expr1
är en TIMESTAMP ochexpr2
är ett intervall är resultatet en TIMESTAMP. - Om
expr1
ochexpr2
är DATEs blir resultatet enINTERVAL DAYS
. - Om
expr1
ellerexpr2
är TIMESTAMP är resultatet enINTERVAL DAY TO SECOND
. - Om
expr1
ochexpr2
är årsmånadsintervall är resultatet ett årsmånadsintervall med tillräckligt breda enheter för att representera resultatet. - Om
expr1
ochexpr2
är dagtidsintervall är resultatet ett dagsintervall på tillräckligt breda enheter för att representera resultatet. - Annars matchar
expr1
resultattypen .
Om båda uttrycken är intervall måste de ha samma klass.
När du subtraherar ett årsmånadsintervall från ett DATUM ser Databricks SQL till att det resulterande datumet är välformat.
Om resultatet flödar över resultattypen genererar Databricks SQL ett ARITHMETIC_OVERFLOW fel.
Använd try_subtract för att återgå NULL
till spill.
Varning
I Databricks Runtime, om spark.sql.ansi.enabled är false
, orsakar ett spill inte ett fel utan "omsluter" resultatet i stället.
Exempel
> 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