Tüm Ürünler
Search
Belge Merkezi

MaxCompute:INTERVAL data type

Son Güncelleme:Oct 04, 2026

MaxCompute'te iki tarih veya zaman damgası değerini çıkardığınızda sonuç bir INTERVAL olur; bu, aralarındaki zaman farkını temsil eden türü belirtilmiş bir gösterimdir. MaxCompute iki INTERVAL alt türü sunar: Yıl ve ay cinsinden takvim tabanlı aralıklar için INTERVAL_YEAR_MONTH ile gün, saat, dakika ve saniye cinsinden sabit uzunluklu aralıklar için INTERVAL_DAY_TIME. Bu iki alt tür farklı zaman ölçeklerine dayandığından aritmetik işlemlerde birlikte kullanılamaz.

Ön koşullar

Başlamadan önce aşağıdaki adımları tamamladığınızdan emin olun:

  • Oturumunuzda aşağıdaki deyimi çalıştırarak MaxCompute 2.0 tür sistemini etkinleştirin:

    SET odps.sql.type.system.odps2=true;

INTERVAL_YEAR_MONTH

INTERVAL_YEAR_MONTH, yıl ve ay cinsinden bir aralığı saklar.

Söz dizimi

String pattern sütununda gösterilen dize kalıbını kullanın. Negatif bir aralık ifade etmek için kalıp değerinin önüne - ekleyin.


Söz dizimi


Dize kalıbı


Açıklama


Örnek


INTERVAL '<value>' YEAR TO MONTH


y-m


Yıl ve ay bileşenleri


INTERVAL '120-3' YEAR TO MONTH (120 yıl, 3 ay)


INTERVAL '<value>' YEAR


y


Yalnızca yıl bileşeni


INTERVAL '9' YEAR (9 yıl)


INTERVAL '<value>' MONTH


m


Yalnızca ay bileşeni


INTERVAL '40' MONTH (40 ay = 3 yıl 4 ay)

Geçerli aralıklar ve taşma davranışı


Alan


Geçerli aralık


Tek başına kullanıldığında


Başka bir alanla birlikte kullanıldığında


yıl


0–9.999


Aralık içinde kalmalıdır


Aralık içinde kalmalıdır


ay


0–11


11'i aşabilir; taşma yıllara dönüştürülür


11'i aşamaz; aşılması ayrıştırma hatasına neden olur

Yalnızca ay içeren taşma örneği

Yalnızca MONTH aralığını belirttiğinizde değer 11'i aşabilir. MaxCompute fazla ayları otomatik olarak yıla dönüştürür:

SELECT INTERVAL '200' MONTH;

Sonuç:

+------+
| _c0  |
+------+
| 16-8 |
+------+

200 ay = 16 yıl 8 ay.

YEAR TO MONTH — ay aralık dışı (hata)

YEAR TO MONTH kullanırken ay değeri 0 ile 11 arasında olmalıdır:

SELECT INTERVAL '-2021-12' YEAR TO MONTH;

Sonuç:

FAILED: ODPS-0130161:[1,17] Parse exception - cannot parse -2021-12 as a valid INTERVAL_DAY_TIME

INTERVAL_DAY_TIME

INTERVAL_DAY_TIME; gün, saat, dakika, saniye ve kesirli saniye cinsinden bir aralığı saklar.

Söz dizimi

String pattern sütununda gösterilen dize kalıbını kullanın. Negatif bir aralık ifade etmek için kalıp değerinin önüne - ekleyin.


Söz dizimi


Dize kalıbı


Açıklama


Örnek


INTERVAL '<value>' DAY


d


Yalnızca gün bileşeni


INTERVAL '1' DAY


INTERVAL '<value>' HOUR


h


Yalnızca saat bileşeni


INTERVAL '1' HOUR


INTERVAL '<value>' MINUTE


m


Yalnızca dakika bileşeni


INTERVAL '1' MINUTE


INTERVAL '<value>' SECOND


s[.nnnnnnnnn]


Yalnızca saniye bileşeni (kesirli saniyeleri destekler)


INTERVAL '1.1' SECOND


INTERVAL '<value>' DAY TO HOUR


d h


Gün ve saat bileşenleri


INTERVAL '1 23' DAY TO HOUR (1 gün, 23 saat)


INTERVAL '<value>' DAY TO MINUTE


d h:m


Gün, saat ve dakika bileşenleri


INTERVAL '1 23:59' DAY TO MINUTE


INTERVAL '<value>' DAY TO SECOND


d h:m:s


Gün, saat, dakika ve saniye bileşenleri


INTERVAL '1 23:59:59.999' DAY TO SECOND


INTERVAL '<value>' HOUR TO MINUTE


h:m


Saat ve dakika bileşenleri


INTERVAL '23:59' HOUR TO MINUTE


INTERVAL '<value>' HOUR TO SECOND


h:m:s


Saat, dakika ve saniye bileşenleri


INTERVAL '23:59:59.999' HOUR TO SECOND


INTERVAL '<value>' MINUTE TO SECOND


m:s


Dakika ve saniye bileşenleri


INTERVAL '59:59.999' MINUTE TO SECOND

Geçerli aralıklar ve taşma davranışı


Alan


Geçerli aralık


Tek başına kullanıldığında


Başka bir alanla birlikte kullanıldığında


gün


0–2.147.483.647


Aralık içinde kalmalıdır


Aralık içinde kalmalıdır


saat


0–23


23'ü aşabilir; taşma günlere dönüştürülür


23'ü aşamaz


dakika


0–59


59'u aşabilir; taşma saatlere dönüştürülür


59'u aşamaz


saniye


0–59,999999999


59'u aşabilir; taşma dakikalara dönüştürülür


59,999999999'u aşamaz

Tek birimlik taşma örneği

Yalnızca tek bir zaman birimi belirttiğinizde değer üst sınırını aşabilir. MaxCompute fazlalığı otomatik olarak bir üst birime dönüştürür:

SELECT INTERVAL '24' HOUR;     -- Equivalent to INTERVAL '1' DAY
SELECT INTERVAL '60' MINUTE;   -- Equivalent to INTERVAL '1' HOUR
SELECT INTERVAL '6000' SECOND; -- Equivalent to INTERVAL '1:40' HOUR TO MINUTE

Çok birimli değer aralık dışı (hata)

Çok birimli biçim kullanırken her alan geçerli aralık içinde kalmalıdır:

SELECT INTERVAL '23:60' HOUR TO MINUTE;

Sonuç:

FAILED: ODPS-0130161:[1,17] Parse exception - cannot parse 23:60 as a valid INTERVAL_DAY_TIME

Desteklenen işlemler

Aynı türdeki INTERVAL değerlerini toplama veya çıkarma

Toplama ve çıkarma işlemleri aynı türdeki INTERVAL değerleri arasında çalışır. INTERVAL_YEAR_MONTH ile INTERVAL_DAY_TIME arasındaki işlemler desteklenmez; çünkü bu iki tür farklı zaman ölçeklerini (takvim ayları ile sabit uzunluklu saniyeler) kullanır.

İki INTERVAL_DAY_TIME değerini toplama:

SELECT INTERVAL '24' HOUR + INTERVAL '23' HOUR;

Sonuç:

+----------------------+
| _c0                  |
+----------------------+
| 1 23:00:00.000000000 |
+----------------------+

İki INTERVAL_DAY_TIME değerini çıkarma:

SELECT INTERVAL '24' HOUR + INTERVAL '-23' HOUR;

Sonuç:

+----------------------+
| _c0                  |
+----------------------+
| 0 01:00:00.000000000 |
+----------------------+

İki INTERVAL_YEAR_MONTH değerini çıkarma:

SELECT INTERVAL '5-1' YEAR TO MONTH - INTERVAL '9-2' YEAR TO MONTH;

Sonuç:

+------+
| _c0  |
+------+
| -4-1 |
+------+

Türler arası aritmetik (hata):

SELECT INTERVAL '2000-1' YEAR TO MONTH + INTERVAL '1 23:59:59.999' DAY TO SECOND;

Sonuç:

FAILED: ODPS-0130071:[1,8] Semantic analysis exception - invalid operand type(s) INTERVAL_YEAR_MONTH,INTERVAL_DAY_TIME for operator '+'

INTERVAL_DAY_TIME elde etmek için DATE, TIMESTAMP veya TIMESTAMP_NTZ değerlerini çıkarma

İki DATE, TIMESTAMP veya TIMESTAMP_NTZ değerini çıkarmak INTERVAL_DAY_TIME sonucu döndürür. İki DATETIME değerini çıkarma işlemi desteklenmez.

İki DATE değerini çıkarma:

SELECT DATE '2021-10-29' - DATE '2024-11-29';

Sonuç:

+--------------------------+
| _c0                      |
+--------------------------+
| -1127 00:00:00.000000000 |
+--------------------------+

İki TIMESTAMP değerini çıkarma:

SELECT TIMESTAMP '2024-11-29 00:01:10' - TIMESTAMP'2021-10-29 00:01:00';

Sonuç:

+-------------------------+
| _c0                     |
+-------------------------+
| 1127 00:00:10.000000000 |
+-------------------------+

DATETIME çıkarma (hata):

SELECT DATETIME '2024-11-11 00:00:00' - DATETIME'2021-11-11 00:00:00';

Sonuç:

FAILED: ODPS-0130071:[1,8] Semantic analysis exception - invalid operand type(s) DATETIME,DATETIME for operator '-'

DATE, TIMESTAMP veya TIMESTAMP_NTZ değerine INTERVAL ekleme veya çıkarma

Bir DATE, TIMESTAMP veya TIMESTAMP_NTZ değerine INTERVAL eklemek veya çıkarmak aynı türde bir değer döndürür. Bu işlem DATETIME değerleri için desteklenmez.

DATE değerinden INTERVAL_YEAR_MONTH çıkarma:

SELECT DATE '2021-11-11' - INTERVAL '-1' MONTH;

Sonuç:

+------------+
| _c0        |
+------------+
| 2021-12-11 |
+------------+

TIMESTAMP_NTZ değerinden INTERVAL_DAY_TIME çıkarma:

SELECT TIMESTAMP_NTZ'2024-11-29 00:01:10' - INTERVAL '1 23' DAY TO HOUR;

Sonuç:

+---------------------+
| _c0                 |
+---------------------+
| 2024-11-27 01:01:10 |
+---------------------+

DATETIME ile INTERVAL (hata):

SELECT DATETIME '2024-11-11 00:00:00' - INTERVAL '1 23' DAY TO HOUR;

Sonuç:

FAILED: ODPS-0130071:[1,8] Semantic analysis exception - invalid operand type(s) DATETIME,INTERVAL_DAY_TIME for operator '-'