Fonction floor

S’applique à :coche marquée oui Databricks SQL oui coché Databricks Runtime 10.4 LTS et ultérieur

Retourne le plus grand nombre non supérieur à expr arrondi à targetScale chiffres après la virgule à l’unité inférieure.

Syntaxe

floor(expr [, targetScale])

Arguments

  • expr : Expression qui prend une valeur numérique.
  • targetScale : littéral ENTIER facultatif supérieur à -38 qui spécifie le nombre de chiffres après la virgule auquel effectuer l’arrondi à l’unité inférieure.

Retours

Si aucune valeur targetScale n’est donnée :

  • Si expr a la valeur DECIMAL(p, s), retourne DECIMAL(p - s + 1, 0).
  • Pour tous les autres cas, retourne un BIGINT.

Si targetScale est spécifié et expr correspond à :

  • TINYINT

    Retourne une valeur DECIMAL(p, 0) avec p = max(3, -targetScale + 1).

  • SMALLINT

    Retourne une valeur DECIMAL(p, 0) avec p = max(5, -targetScale + 1).

  • INTEGER

    Retourne une valeur DECIMAL(p, 0) avec p = max(10, -targetScale + 1)).

  • BIGINT

    Retourne une valeur DECIMAL(p, 0) avec p = max(20, -targetScale + 1)).

  • FLOAT

    Retourne une valeur DECIMAL(p, s) avec p = max(14, -targetScale + 1)) et s = min(7, max(0, targetScale))

  • DOUBLE

    Retourne une valeur DECIMAL(p, s) avec p = max(30, -targetScale + 1)) et s = min(15, max(0, targetScale))

  • DECIMAL(p_in, s_in)

    Retourne une valeur DECIMAL(p, s) avec p = max(p_in - s_in + 1, -targetScale + 1)) et s = min(s_in, max(0, targetScale))

Si targetScale est négatif, l’arrondi se produit à -targetScale chiffres à gauche de la virgule.

La valeur targetScale par défaut est 0, ce qui arrondit au nombre intégral le plus petit suivant.

Lorsque targetScale est spécifié avec un type d’entrée intégral, Azure Databricks déclenche ARITHMETIC_OVERFLOW si le résultat dépasse le type de sortie.

Avertissement

Dans Databricks Runtime, si spark.sql.ansi.enabled est falseactivé, un dépassement de capacité n’entraîne pas d’erreur, mais « encapsule » le résultat à la place.

Conditions d’erreur courantes

Exemples

> SELECT floor(-0.1);
 -1

> SELECT floor(5);
 5

> SELECT floor(3345.1, -2);
 3300

> SELECT floor(-12.345, 1);
 -12.4

-- Rounding -128 to the nearest 10 produces -130, which overflows TINYINT.
> SELECT floor(cast(-128 AS TINYINT), -1);
  Error: ARITHMETIC_OVERFLOW