Tüm Ürünler
Search
Belge Merkezi

MaxCompute:DATEADD

Son Güncelleme:Oct 04, 2026

Bir tarih veya zaman damgası değerine bir zaman aralığı ekler veya bu değerden bir zaman aralığı çıkarır.

Sözdizimi

DATEADD(DATE|DATETIME|TIMESTAMP|TIMESTAMP_NTZ <date>, BIGINT <delta>, STRING <datepart>)

Parametreler

date (zorunlu)

Değiştirilecek tarih veya zaman damgası. Desteklenen türler: DATE, DATETIME, TIMESTAMP ve TIMESTAMP_NTZ.

MaxCompute 1,0 veri türü sürümünde, yyyy-mm-dd hh:mi:ss biçimindeki bir STRING değeri örtük olarak DATETIME türüne dönüştürülür. Örneğin, '2025-07-21 00:00:00' ifadesi bir DATETIME değeri olarak işlenir.

delta (zorunlu)

Eklenecek veya çıkarılacak zaman birimi sayısı. Bu parametre BIGINT türündedir. Pozitif bir değer aralığı ekler; negatif bir değer aralığı çıkarır. Örneğin, 7 gün eklemek için delta değerini 7 olarak ayarlayın. 3 ay çıkarmak için delta değerini -3 olarak ayarlayın.

MaxCompute 1,0 veri türü sürümünde, STRING ve DOUBLE değerleri örtük olarak BIGINT türüne dönüştürülür.

Not

delta değerinin eklenmesi veya çıkarılması, daha büyük bir zaman birimine taşıma veya borç alınmasına neden olabilir. Örneğin, 20 ay eklemek yılın artmasına yol açar. Yıl, ay, saat, dakika ve saniye bileşenleri sırasıyla 10'luk, 12'lik, 24'lük ve 60'lık sayı sistemlerini takip eder.

datepart (zorunlu)

Aralığın zaman birimi. Bu parametre bir STRING sabiti olmalıdır. Sabit olmayan değerler, desteklenmeyen biçimler veya diğer veri türleri hata döndürür.


Zaman birimi


Kabul edilen değerler


Yıl


year, yyyy


Çeyrek


quarter, q


Ay


month, mon, mm


Hafta


week


Gün


day, dd


Saat


hour, hh


Dakika


mi


Saniye


ss


Milisaniye


ff3


Mikrosaniye


ff6

Dönüş değeri

Giriş date parametresiyle aynı türde (DATE, DATETIME, TIMESTAMP veya TIMESTAMP_NTZ) bir değer döndürür.

Koşul Sonuç
date DATE, DATETIME, TIMESTAMP veya TIMESTAMP_NTZ değil Hata
date NULL Hata
delta NULL NULL
datepart NULL NULL

Ay sonu işleme

datepart değeri month (veya quarter) olduğunda, DATEADD elde edilen ayda yeterli gün varsa gün değerini korur. Elde edilen ayda daha az gün varsa, gün o ayın son gününe ayarlanır.

-- January 29 + 1 month: February 2005 has only 28 days, so the result is February 28.
SELECT DATEADD(DATETIME '2005-01-29 00:00:00', 1, 'mm');
-- Result: 2005-02-28 00:00:00

-- March 30 - 1 month: February 2005 has only 28 days, so the result is February 28.
SELECT DATEADD(DATETIME '2005-03-30 00:00:00', -1, 'mm');
-- Result: 2005-02-28 00:00:00

Örnekler

Her datepart değerinin etkisi

Her sorgu, aynı temel tarihe farklı bir datepart uygular:

-- Year: add 1 year
SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 1, 'yyyy');
-- Result: 2006-02-28 00:00:00

-- Quarter: add 1 quarter (3 months)
SELECT DATEADD(DATE '2005-02-28', 1, 'quarter');
-- Result: 2005-05-28

-- Month: add 1 month
SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 1, 'mm');
-- Result: 2005-03-28 00:00:00

-- Week: add 2 weeks (14 days)
SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 2, 'week');
-- Result: 2005-03-14 00:00:00

-- Day: add 1 day
SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 1, 'dd');
-- Result: 2005-03-01 00:00:00

-- Hour: subtract 3 hours
SELECT DATEADD(DATETIME '2005-03-30 05:24:00', -3, 'hh');
-- Result: 2005-03-30 02:24:00

-- Minute: subtract 30 minutes
SELECT DATEADD(DATETIME '2005-03-30 05:24:00', -30, 'mi');
-- Result: 2005-03-30 04:54:00

-- Second: subtract 30 seconds
SELECT DATEADD(DATETIME '2005-03-30 05:24:00', -30, 'ss');
-- Result: 2005-03-30 05:23:30

-- Millisecond: add 1000 milliseconds (1 second) to a TIMESTAMP_NTZ value
SELECT DATEADD(TIMESTAMP_NTZ '2005-02-28 00:00:00.123456', 1000, 'ff3');
-- Result: 2005-02-28 00:00:01.123456

-- Microsecond: add 1000 microseconds to a TIMESTAMP value
SELECT DATEADD(TIMESTAMP '2005-02-28 00:00:00.123456', 1000, 'ff6');
-- Result: 2005-02-28 00:00:00.124456

Bir gün çıkarın

SELECT DATEADD(DATETIME '2005-02-28 00:00:00', -1, 'dd');
-- Result: 2005-02-27 00:00:00

Yıllar arasında ay taşması

20 ay eklemek, ayın taşmasına ve yılın artmasına neden olur:

SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 20, 'mm');
-- Result: 2006-10-28 00:00:00

DATE değerine 1 ay ekleyin

SELECT DATEADD(DATE '2005-02-18', 1, 'mm');
-- Result: 2005-03-18

TIMESTAMP ile alt saniye hassasiyetini koruyun

SELECT DATEADD(TIMESTAMP '2005-02-28 00:00:00.123', 14, 'day');
-- Result: 2005-03-14 00:00:00.123

GETDATE ile göreli tarihler

Mevcut zamana göreli tarihleri hesaplamak için DATEADD işlevini GETDATE ile birlikte kullanın. Örneğin, DATEADD(GETDATE(), -1, 'dd') ifadesi dün tarihini döndürür.

-- Assuming the current time is 2020-11-17 16:31:44
SELECT DATEADD(GETDATE(), -1, 'dd');
-- Result: 2020-11-16 16:31:44

NULL datepart NULL döndürür

SELECT DATEADD(DATE '2005-02-18', 1, NULL);
-- Result: NULL

Veri türü sürümü davranışı

MaxCompute 2,0 veri türü sürümü

date değeri DATE, DATETIME, TIMESTAMP veya TIMESTAMP_NTZ değilse, açıkça tür dönüştürme işlemi uygulayın. Aksi takdirde hata döndürülür.

SELECT DATEADD(CAST('2005-03-30 00:00:00' AS datetime), -1, 'mm');

-- Result:
-- +------------+
-- | _c0        |
-- +------------+
-- | 2005-02-28 00:00:00 |
-- +------------+

2,0 veri türü sürümünü etkinleştirmek için aşağıdaki SET komutunu SQL deyimiyle birlikte gönderin:

set odps.sql.type.system.odps2=true;
SELECT DATEADD(TIMESTAMP '2005-02-18 00:00:00', 1, 'mm');
-- Result: 2005-03-18 00:00:00.0

MaxCompute 1,0 veri türü sürümü

yyyy-mm-dd hh:mi:ss biçimindeki STRING değerleri örtük olarak DATETIME türüne dönüştürülür. Bu biçimle eşleşmeyen bir STRING NULL döndürür.

-- Set the data type edition to 1.0.
SET odps.sql.type.system.odps2=false;
SET odps.sql.hive.compatible=false;

-- This STRING does not match the yyyy-mm-dd hh:mi:ss format, so NULL is returned.
SELECT DATEADD('2021-08-27',1,'dd');

-- This STRING matches the format and is implicitly converted to DATETIME.
SELECT DATEADD('2005-02-28 00:00:00', 1000000000, 'ff6');
-- Result: 2005-02-28 00:16:40

İlgili işlevler

DATEADD bir tarih işlevidir. Diğer tarih hesaplama ve dönüştürme işlevleri için bkz. Tarih işlevleri.