floor fungsi

Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime 10.4 LTS ke atas

Mengembalikan angka terbesar yang tidak lebih besar dari expr, yang dibulatkan ke bawah ke targetScale digit relatif terhadap titik desimal.

Sintaks

floor(expr [, targetScale])

Argumen

  • expr: Ekspresi yang mengevaluasi ke numerik.
  • targetScale: BILANGAN BULAT opsional lebih besar dari -38 yang ditentukan oleh berapa banyak digit setelah titik desimal yang dibulatkan ke bawah.

Mengembalikan

Jika tidak ada targetScale yang diberikan:

  • Jika expr adalah DECIMAL(p, s), mengembalikan DECIMAL(p - s + 1, 0).
  • Untuk semua kasus lain, kembalikan BIGINT.

Jika targetScale ditentukan dan expr merupakan:

  • TINYINT

    Mengembalikan DECIMAL(p, 0) dengan p = max(3, -targetScale + 1).

  • SMALLINT

    Mengembalikan DECIMAL(p, 0) dengan p = max(5, -targetScale + 1).

  • INTEGER

    Mengembalikan DECIMAL(p, 0) dengan p = max(10, -targetScale + 1)).

  • BIGINT

    Mengembalikan DECIMAL(p, 0) dengan p = max(20, -targetScale + 1)).

  • FLOAT

    Mengembalikan DECIMAL(p, s) dengan p = max(14, -targetScale + 1)) dan s = min(7, max(0, targetScale))

  • DOUBLE

    Mengembalikan DECIMAL(p, s) dengan p = max(30, -targetScale + 1)) dan s = min(15, max(0, targetScale))

  • DECIMAL(p_in, s_in)

    Mengembalikan DECIMAL(p, s) dengan p = max(p_in - s_in + 1, -targetScale + 1)) dan s = min(s_in, max(0, targetScale))

Jika targetScale negatif, pembulatan dilakukan ke -targetScale digit di sebelah kiri titik desimal.

Defaultnya targetScale adalah 0, yang dibulatkan ke bawah ke angka integral berikutnya yang lebih kecil.

Ketika targetScale ditentukan dengan jenis input integral, Azure Databricks menaikkan ARITHMETIC_OVERFLOW jika hasilnya meluapkan jenis output.

Peringatan

Dalam Databricks Runtime, jika spark.sql.ansi.enabled adalah false, luapan tidak menyebabkan kesalahan tetapi "membungkus" hasilnya sebagai gantinya.

Kondisi kesalahan umum

Contoh

> 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