- operator (tanda minus)

Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime

Menghasilkan pengurangan expr2 dari expr1.

Sintaks

expr1 - expr2

Argumen

  • expr1: Ekspresi numerik, TANGGAL, STEMPEL WAKTU, atau INTERVAL.
  • expr2: Jenis yang diterima tergantung pada jenis expr:
    • Jika expr1 numerik expr2 harus berupa ekspresi numerik
    • Jika expr1 interval tahun-bulan atau hari-waktu, expr2 harus dari kelas pencocokan interval.
    • Jika tidak expr2 haruslah TANGGAL atau STEMPEL WAKTU.

Mengembalikan

Jenis hasil ditentukan dalam urutan berikut:

  • Jika expr1 numerik, hasilnya adalah jenis maksimum umum dari argumen.
  • Jika expr1 TANGGAL dan expr2 merupakan interval hari-jam hasilnya adalah STEMPEL WAKTU.
  • Jika expr1 STEMPEL WAKTU dan expr2 merupakan interval hasilnya adalah STEMPEL WAKTU.
  • Jika expr1 dan expr2 TANGGAL hasilnya adalah INTERVAL DAYS.
  • Jika expr1 dan expr2 STEMPEL WAKTU hasilnya adalah INTERVAL DAY TO SECOND.
  • Jika expr1 dan expr2 interval tahun-bulan hasilnya adalah interval tahun-bulan dari unit yang cukup lebar untuk mewakili hasilnya.
  • Jika expr1 dan expr2 interval hari-jam hasilnya adalah interval hari-waktu dari unit yang cukup lebar untuk mewakili hasilnya.
  • Jika tidak, jenis hasil cocok expr1.

Jika kedua ekspresi adalah interval mereka harus dari kelas yang sama.

Saat Anda mengurangi interval bulan tahunan dari DATE, Azure Databricks memastikan bahwa tanggal yang dihasilkan terbentuk dengan baik.

Jika hasil meluapkan jenis hasil, Azure Databricks menimbulkan kesalahan ARITHMETIC_OVERFLOW atau INTERVAL_ARITHMETIC_OVERFLOW.

Gunakan try_subtract untuk kembali NULL pada luapan.

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 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