Tüm Ürünler
Search
Belge Merkezi

Hologres:Date and time functions

Son Güncelleme:Oct 07, 2026

Hologres; tür dönüştürme, aritmetik işlemler, alan ayıklama ve kırpma ile geçerli tarih veya saati getirme amacıyla aşağıdaki tarih ve saat işlevlerini destekler.

İşlevlere genel bakış

Tür dönüştürme işlevleri

İşlev Açıklama Örnek Sonuç
MAKE_DATE Yıl, ay ve gün değerlerinden bir tarih oluşturur. Varsayılan zaman aralığı: 1925–2282. MAKE_DATE(2013, 7, 15) 2013-07-15
TO_CHAR Bir zaman damgasını, tamsayıyı veya sayıyı dizeye dönüştürür. TO_CHAR(current_timestamp, 'YYYY-MM-DD') 2024-08-05
TO_DATE Bir dizeyi tarihe dönüştürür. Varsayılan zaman aralığı: 1925–2282. TO_DATE('05 Dec 2000', 'DD Mon YYYY') 2000-12-05
TO_TIMESTAMP Bir dizeyi veya Unix epoch zamanını zaman damgasına dönüştürür. Varsayılan zaman aralığı: 1925–2282. TO_TIMESTAMP(163280296) 1975-03-06 03:38:16+08

Tarih/saat aritmetik işlevleri

İşlev Açıklama Örnek Sonuç
ADD_MONTHS Bir tarihe ay ekler. Oracle uyumludur; orafce uzantısını gerektirir. ADD_MONTHS(current_date, 2) 2024-10-05
DATEADD Bir tarihten bir zaman aralığını ekler veya çıkarır. Varsayılan zaman aralığı: 1925–2282. V2.0.31–V2.1.0 ve V2.1.13+ sürümlerinde kullanılabilir. DATEADD(a, 1, 'mm') 2005-03-28 00:00:00
DATEDIFF Belirtilen birim cinsinden iki tarih veya zaman damgası arasındaki farkı döndürür. Varsayılan zaman aralığı: 1925–2282. V2.0.31–V2.1.0 ve V2.1.13+ sürümlerinde kullanılabilir. DATEDIFF(a, '2005-03-02', 'mi') -2880
MONTHS_BETWEEN İki tarih arasındaki ay sayısını döndürür. Oracle uyumludur; orafce uzantısını gerektirir. MONTHS_BETWEEN('2022-01-01', '2021-11-01') 2
NEXT_DAY Verilen bir tarihten sonra gelen ilk belirtilen hafta içi gününün tarihini döndürür. Oracle uyumludur; orafce uzantısını gerektirir. NEXT_DAY('2022-05-01', 'FRIDAY') 2022-05-06
+ Tarih ve saat değerlerini toplar. date '2001-09-28' + integer '7' 2001-10-05
- Tarih ve saat değerlerini çıkarır. date '2001-10-01' - date '2001-09-28' 3
* Bir aralığı bir sayıyla çarpar. 21 * interval '3 day' 0 years 0 mons 63 days 0 hours 0 mins 0.0 secs
/ Bir aralığı bir sayıya böler. interval '1 hour' / 1.5 0 years 0 mons 0 days 0 hours 40 mins 0.0 secs

Tarih/saat alanı ayıklama ve kırpma

İşlev Açıklama Örnek Sonuç
DATE_PART Zaman damgasından bir alt alan ayıklar. EXTRACT işlevine eşdeğerdir. DATE_PART('hour', timestamp '2001-02-16 16:38:40') 16
DATE_TRUNC Zaman damgasını belirtilen hassasiyete kadar kırpar. DATE_TRUNC('day', timestamptz '2001-02-16 20:38:40+08') 2001-02-16 00:00:00+08
EXTRACT Zaman damgasından bir alt alan ayıklar. DATE_PART işlevine eşdeğerdir. EXTRACT(hour FROM timestamp '2001-02-16 20:38:40') 20
LAST_DAY Ayın son gününü döndürür. Varsayılan zaman aralığı: 1925–2282. V2.0.31–V2.1.0 ve V2.1.13+ sürümlerinde kullanılabilir. LAST_DAY('2004-02-28') 2004-02-29
ORACLE_LAST_DAY Ayın son gününü döndürür. Oracle uyumludur; orafce uzantısını gerektirir. ORACLE_LAST_DAY('2022-05-01') 2022-05-31
ROUND Tarihi en yakın zaman birimine yuvarlar. Oracle uyumludur; orafce uzantısını gerektirir. ROUND('2022-07-22'::date, 'Y') 2023-01-01
TRUNC Tarih veya zaman damgasını belirtilen hassasiyete kadar kırpar. Oracle uyumludur; orafce uzantısını gerektirir. TRUNC('2022-05-22'::date, 'Y') 2022-01-01

Geçerli tarih/saat işlevleri

İşlev Açıklama Dönüş türü
CLOCK_TIMESTAMP() Gerçek geçerli saati döndürür. Tek bir ifade içinde bile her çağrıda değişir. TIMESTAMPTZ
CURRENT_DATE İşlem başlangıcındaki geçerli tarihi döndürür. DATE
CURRENT_TIMESTAMP İşlem başlangıcındaki zaman damgasını döndürür. TRANSACTION_TIMESTAMP() ve NOW() işlevlerine eşdeğerdir. TIMESTAMPTZ
LOCALTIMESTAMP İşlem başlangıcındaki zaman damgasını saat dilimi olmadan döndürür. TIMESTAMP
NOW() İşlem başlangıcındaki zaman damgasını döndürür. CURRENT_TIMESTAMP ve TRANSACTION_TIMESTAMP() işlevlerine eşdeğerdir. TIMESTAMPTZ
STATEMENT_TIMESTAMP() Geçerli ifadenin başlangıcındaki zaman damgasını döndürür. TIMESTAMPTZ
TIMEOFDAY() Gerçek geçerli saati biçimlendirilmiş bir metin dizesi olarak döndürür. TEXT
TRANSACTION_TIMESTAMP() İşlem başlangıcındaki zaman damgasını döndürür. CURRENT_TIMESTAMP ve NOW() işlevlerine eşdeğerdir. TIMESTAMPTZ

Diğer işlevler

İşlev Açıklama Örnek Sonuç
ISFINITE Bir tarih veya zaman damgasının sonlu olup olmadığını (infinity veya -infinity olmadığını) test eder. ISFINITE(date '2001-02-16') t

Desteklenen tarih bölümleri ve birimleri

Aşağıdaki tabloda DATEADD, DATEDIFF, DATE_PART, DATE_TRUNC ve EXTRACT tarafından kabul edilen tarih bölümü değerleri gösterilmektedir. Tüm bölümler her işlev için geçerli değildir.

Tarih bölümü Kısaltmalar DATEADD DATEDIFF DATE_PART / EXTRACT DATE_TRUNC
year yyyy, yy ✓ ✓ ✓ ✓
quarter — — — ✓ ✓
month mm, mon ✓ ✓ ✓ ✓
week — — — ✓ ✓
day dd ✓ ✓ ✓ ✓
hour hh ✓ ✓ ✓ ✓
minute mi ✓ ✓ ✓ ✓
second ss ✓ ✓ ✓ ✓
century — — — ✓ ✓
decade — — — ✓ ✓
dow — — — ✓ (0=Pazar) —
isodow — — — ✓ (7=Pazar) —
doy — — — ✓ —
epoch — — — ✓ —

Genişletilmiş zaman aralığı desteği (GUC parametresi)

Varsayılan olarak TO_CHAR, TO_DATE ve TO_TIMESTAMP işlevleri 1925–2282 aralığındaki tarihleri destekler. Tüm zaman aralıklarını desteklemek için SQL sorgunuzdan önce aşağıdaki ifadelerden birini çalıştırın.

Hologres V1.1.31 ve sonraki sürümlerde kullanılabilir:

SET hg_experimental_functions_use_pg_implementation = 'to_char';
SET hg_experimental_functions_use_pg_implementation = 'to_date';
SET hg_experimental_functions_use_pg_implementation = 'to_timestamp';
-- Or enable all three at once:
SET hg_experimental_functions_use_pg_implementation = 'to_char,to_date,to_timestamp';
Bu GUC parametresinin ayarlanması, sorgu performansını yaklaşık %50 oranında düşürür. Hologres V1.1.42 ve sonraki sürümlerde performans etkisi yaklaşık %20'ye indirilmiştir.

Tür dönüştürme işlevleri

TO_CHAR

Bir zaman damgasını, tamsayıyı veya sayıyı dizeye dönüştürür.

Sözdizimi

TO_CHAR(TIMESTAMP | TIMESTAMPTZ, TEXT)
TO_CHAR(INT, TEXT)
TO_CHAR(DOUBLE PRECISION, TEXT)

Dönüş türü: TEXT

Kullanım notları

  • Hem 24 saatlik (HH24) hem de 12 saatlik (HH12) biçimleri desteklenir. Varsayılan olarak 12 saatlik biçim kullanılır.

  • Yaygın biçim belirteçleri: YYYY (yıl), MM (ay), DD (gün), HH (saat), MI (dakika), SS (saniye).

  • Saat dilimli zaman damgaları (TIMESTAMPTZ) için: Saat dilimi belirtilmezse değer biçimlendirmeden önce sistem saat dilimine (varsayılan olarak UTC+8) dönüştürülür. Farklı bir saat dilimine dönüştürmek için AT TIME ZONE ifadesini kullanın.

  • Desteklenen zaman aralığını 1925–2282 dışına genişletmek için bkz. Genişletilmiş zaman aralığı desteği.

Örnekler

Bir zaman damgasını 24 saatlik biçime dönüştürme:

-- Returns: 13:48:30
SELECT TO_CHAR(current_timestamp, 'HH24:MI:SS');

-- Returns: 2024-08-05
SELECT TO_CHAR(current_timestamp, 'YYYY-MM-DD');

Bir zaman damgasını 12 saatlik biçime dönüştürme:

-- Returns: 01:50:42 PM
SELECT TO_CHAR(current_timestamp, 'HH12:MI:SS AM');

-- Returns: 12:30:00 AM
SELECT TO_CHAR(time '00:30:00', 'HH12:MI:SS AM');

Bir TIMESTAMPTZ sütununu dönüştürme — değer varsayılan olarak sistem saat dilimine (UTC+8) dönüştürülür:

CREATE TABLE time_test(a TEXT, b TIMESTAMPTZ);
INSERT INTO time_test VALUES ('2001-09-28 03:00:00', '2004-10-19 10:23:54+08');

-- Returns: 10:23:54
SELECT TO_CHAR(b, 'HH24:MI:SS') FROM time_test;

Bir TIMESTAMPTZ sütununu AT TIME ZONE kullanarak belirli bir saat dilimine dönüştürme:

CREATE TABLE timestamptz_test(a TIMESTAMPTZ);
INSERT INTO timestamptz_test VALUES ('2023-03-21 10:23:54+02');

-- Without a time zone override: converted to system time zone (UTC+8). Returns: 2023-03-21 16:23:54
SELECT TO_CHAR(a, 'YYYY-MM-DD HH24:MI:SS') FROM timestamptz_test;

-- With the US/Eastern time zone. Returns: 2023-03-21 04:23:54
SELECT TO_CHAR(a AT TIME ZONE 'US/Eastern', 'YYYY-MM-DD HH24:MI:SS') FROM timestamptz_test;

Bir tamsayıyı dizeye dönüştürme:

-- Returns: 125
SELECT TO_CHAR(125, '999');

Çift hassasiyetli bir sayıyı dizeye dönüştürme:

-- Returns: 125.8
SELECT TO_CHAR(125.8::real, '999D9');

TO_DATE

Bir dizeyi tarihe dönüştürür. Varsayılan zaman aralığı: 1925–2282.

Sözdizimi

TO_DATE(<text_date> TEXT, <format_mask> TEXT)

Parametreler

Parametre Gerekli Açıklama
text_date Evet Dönüştürülecek dize.
format_mask Evet Giriş dizesinin tarih biçimi.

Dönüş türü: DATE

Kullanım notları

Desteklenen zaman aralığını 1925–2282 dışına genişletmek için bkz. Genişletilmiş zaman aralığı desteği.

Örnekler

Bir dizeyi tarihe dönüştürme:

-- Returns: 2000-12-05
SELECT TO_DATE('05 Dec 2000', 'DD Mon YYYY');

-- Returns: 2001-03-24
SELECT TO_DATE('2001 03 24', 'YYYY-MM-DD');

Bir TEXT sütununu tarihe dönüştürme:

CREATE TABLE time_test(a TEXT);
INSERT INTO time_test VALUES ('2001-09-28 03:00:00');
SELECT TO_DATE(a, 'YYYY-MM-DD') FROM time_test;

Sonuç:

  to_date
------------
 2001-09-28

TO_TIMESTAMP

Bir dizeyi veya Unix epoch zamanını bir TIMESTAMPTZ değerine dönüştürür. Varsayılan zaman aralığı: 1925–2282.

Sözdizimi

-- Convert a string to a timestamp
TO_TIMESTAMP(<text_date> TEXT, <format_mask> TEXT)

-- Convert a Unix epoch time (seconds since 1970-01-01 00:00:00 UTC) to a timestamp
TO_TIMESTAMP(DOUBLE PRECISION)

Dönüş türü: TIMESTAMPTZ

Kullanım notları

Örnekler

Bir dizeyi zaman damgasına dönüştürme:

SELECT TO_TIMESTAMP('05 Dec 2000', 'DD Mon YYYY');

Sonuç:

      to_timestamp
------------------------
 2000-12-05 00:00:00+08

Bir TEXT sütununu zaman damgasına dönüştürme:

CREATE TABLE time_test(a TEXT);
INSERT INTO time_test VALUES ('2001-09-28 03:00:00');
SELECT TO_TIMESTAMP(a, 'YYYY-MM-DD') FROM time_test;

Sonuç:

      to_timestamp
------------------------
 2001-09-28 00:00:00+08

Saniye cinsinden bir Unix epoch zamanını dönüştürme:

-- Returns: 1975-03-06 03:38:16+08
SELECT TO_TIMESTAMP(163280296);

Milisaniye cinsinden bir Unix epoch zamanını dönüştürme (önce 1000'e bölün):

-- Returns: 2021-09-28 12:22:41+08
SELECT TO_TIMESTAMP(1632802961000 / 1000);

MAKE_DATE

Tamsayı yıl, ay ve gün değerlerinden bir tarih oluşturur. Varsayılan zaman aralığı: 1925–2282.

Sözdizimi

MAKE_DATE(<year> INT, <month> INT, <day> INT)

Dönüş türü: DATE

Kullanım notları

Hologres V2.0.29 ve sonraki sürümlerde kullanılabilir. Yazma işlemlerinde bağımsız değişkenlerin tamamı sabit değer olamaz.

Örnek

-- Returns: 2013-07-15
SELECT MAKE_DATE(2013, 7, 15);

Sonuç:

 make_date
------------
 2013-07-15

Tarih/saat aritmetik işlevleri

DATEADD

Bir tarihe zaman aralığı ekler veya çıkarır. Varsayılan zaman aralığı: 1925–2282.

Sözdizimi

DATEADD(<d> DATE | TIMESTAMP | TIMESTAMPTZ, <num> BIGINT, <str> TEXT)

Parametreler

Parametre Açıklama
d Temel tarih veya saat değeri.
num Eklenecek (pozitif) veya çıkarılacak (negatif) birim sayısı.
str Zaman birimi. Geçerli değerler için bkz. Desteklenen tarih parçaları ve birimleri.

Dönüş türü: Giriş türüyle aynıdır (DATE, TIMESTAMP veya TIMESTAMPTZ).

Kullanım notları

  • Hologres V2.0.31–V2.1.0 ve V2.1.13 ile sonraki sürümlerde kullanılabilir.

  • Yazma işlemlerinde bağımsız değişkenlerin tamamı sabit değer olamaz.

Örnek

Bir zaman damgası sütununa bir ay ekleme:

CREATE TABLE test_dateadd (a TIMESTAMP);
INSERT INTO test_dateadd VALUES ('2005-02-28 00:00:00');

SELECT DATEADD(a, 1, 'mm') FROM test_dateadd;

Sonuç:

       dateadd
---------------------
 2005-03-28 00:00:00

ADD_MONTHS

Bir tarihe belirtilen sayıda ay ekler. Bu, orafce uzantısını gerektiren Oracle uyumlu bir işlevdir. Daha fazla bilgi için bkz. Desteklenen Oracle işlevleri.

Sözdizimi

ADD_MONTHS(<d> DATE, <month> INT)

Parametreler

Parametre Açıklama
d Temel tarih.
month Eklenecek ay sayısı.

Dönüş türü: DATE

Örnek

SELECT ADD_MONTHS(current_date, 2);

Sonuç:

 add_months
------------
 2024-10-05

DATEDIFF

İki tarih veya zaman damgası arasındaki farkı belirtilen birimde döndürür. Varsayılan zaman aralığı: 1925–2282.

Sözdizimi

DATEDIFF(<d1> DATE | TIMESTAMP | TIMESTAMPTZ, <d2> DATE | TIMESTAMP | TIMESTAMPTZ, <str> TEXT)

Parametreler

Parametre Açıklama
d1 İlk tarih veya zaman damgası.
d2 İkinci tarih veya zaman damgası.
str Farkı hesaplamak için kullanılan zaman birimi. Geçerli değerler için bkz. Desteklenen tarih parçaları ve birimleri.

Dönüş türü: BIGINT

Kullanım notları

  • Hologres V2.0.31–V2.1.0 ve V2.1.13 ile sonraki sürümlerde kullanılabilir.

  • Yazma işlemlerinde bağımsız değişkenlerin tamamı sabit değer olamaz.

  • İşlev yuvarlama yerine tam birim kırpma kullanır. Fark bir tam birimden azsa 0 döndürür. Örneğin, 2023-12-31 ile 2024-01-01 arasındaki yıl farkı 0 olur.

  • Bunun yerine sınır geçişlerini saymak için (önceki örnekte 1 döndürmek üzere) sorgunuzdan önce aşağıdaki ifadeyi çalıştırın:

    SET hg_experimental_datediff_use_presto_impl = off;

Örnek

İki zaman damgası arasındaki farkı dakika cinsinden hesaplama:

CREATE TABLE test_datediff (a TIMESTAMP);
INSERT INTO test_datediff VALUES ('2005-02-28 00:00:00');

SELECT DATEDIFF(a, '2005-03-02 00:00:00', 'mi') FROM test_datediff;

Sonuç:

 datediff
----------
    -2880

MONTHS_BETWEEN

İki tarih arasındaki ay sayısını döndürür. Bu, orafce uzantısını gerektiren Oracle uyumlu bir işlevdir. Daha fazla bilgi için bkz. Desteklenen Oracle işlevleri.

Sözdizimi

MONTHS_BETWEEN(DATE, DATE)

Dönüş türü: INT

Örnekler

-- Returns: 2
SELECT MONTHS_BETWEEN('2022-01-01', '2021-11-01');

-- Returns: -2
SELECT MONTHS_BETWEEN('2021-11-01', '2022-01-01');

NEXT_DAY

Belirtilen bir tarihten sonra gelen ilk belirli haftanın gününün tarihini döndürür. Bu, Oracle ile uyumlu bir işlevdir ve orafce uzantısını gerektirir. Daha fazla bilgi için bkz. Desteklenen Oracle işlevleri.

Sözdizimi

NEXT_DAY(<d> DATE, <str> TEXT | INT)

Parametreler

Parametre Açıklama
d Başlangıç tarihi.
str Hedef haftanın günü; dize (örneğin Friday) veya 1 ile 7 arasında bir tamsayı olarak belirtilir; burada 1 = Pazar ve 2 = Pazartesi'dir.

Dönüş türü: DATE

Örnekler

-- Returns: 2022-05-06
SELECT NEXT_DAY('2022-05-01', 'FRIDAY');

-- Returns: 2022-05-06
SELECT NEXT_DAY('2022-05-01', 5);

Aritmetik operatörler

Aşağıdaki operatörler tarih ve saat değerleriyle çalışır.

OperatörSol işlenenSağ işlenenAçıklamaÖrnekSonuç
+DATEINTEGERBir tarihe gün ekler.date '2001-09-28' + integer '7'2001-10-05
+DATETIMEBir tarih ve saati birleştirerek zaman damgası oluşturur.date '2001-09-28' + time '03:00'2001-09-28 03:00:00
+DATEINTERVALBir tarihe aralık ekler.date '2001-09-28' + interval '1 hour'2001-09-28 01:00:00
+TIMESTAMPTZINTERVALBir zaman damgasına aralık ekler.now() + interval '1 day'2022-12-08 20:09:19+08
-DATEDATEİki tarih arasındaki gün sayısını tamsayı olarak döndürür.date '2001-10-01' - date '2001-09-28'3
-DATEINTEGERBir tarihten gün çıkarır.date '2001-10-01' - integer '7'2001-09-24
-DATETIMEBir tarihten saat çıkararak zaman damgası oluşturur.date '2001-09-28' - time '03:00'2001-09-27 21:00:00
-DATEINTERVALBir tarihten aralık çıkarır.date '2001-09-28' - interval '1 hour'2001-09-27 23:00:00
-TIMESTAMPTZINTERVALBir zaman damgasından aralık çıkarır.now() - interval '2 day'2022-12-06 20:27:21+08
*INTEGERINTERVALBir aralığı çarpar.21 * interval '3 day'0 years 0 mons 63 days 0 hours 0 mins 0.0 secs
/INTERVALDOUBLE PRECISIONBir aralığı böler.interval '1 hour' / double precision '1.5'0 years 0 mons 0 days 0 hours 40 mins 0.0 secs

Tarih/saat alanı ayıklama ve kırpma

EXTRACT

Bir zaman damgası ifadesinden alt alanları (yıl, ay veya gün gibi) ayıklar. EXTRACT işlevi DATE_PART ile eşdeğerdir.

Sözdizimi

EXTRACT(field FROM TIMESTAMP)

Dönüş türü: DOUBLE PRECISION

Kullanım notları

field parametresi için geçerli değerler: century, day, decade, dow (haftanın günü, 0=Pazar), isodow (haftanın günü, 7=Pazar), doy (yılın günü), epoch, hour, minute, month, quarter, second, week, year.

Örnekler

Bir zaman damgasından saati ayıklayın:

-- Returns: 20
SELECT EXTRACT(hour FROM timestamp '2001-02-16 20:38:40');

Geçerli saatten dakikayı ayıklayın:

-- Returns: 12
SELECT EXTRACT(minute FROM NOW());

Unix epoch zamanını (1970-01-01 00:00:00 UTC'den bu yana geçen saniyeler) alın:

CREATE TABLE time_test(a TEXT);
INSERT INTO time_test VALUES ('2001-09-28 03:00:00');
SELECT EXTRACT(epoch FROM to_timestamp(a, 'YYYY-MM-DD')) FROM time_test;

Sonuç:

  date_part
------------
 1001606400

Performans açısından optimize edilmiş ayıklama işlevleri

Hologres V4.0 sürümünden itibaren ClickHouse ve Doris ile daha iyi uyumluluk sağlayan aşağıdaki işlevler desteklenmektedir. Bu işlevler EXTRACT(<field> FROM timestamp) ile aynı anlambilime sahiptir ancak daha iyi performans sunar. Bu işlevler yalnızca sabit bağımsız değişkenleri desteklemez.

İşlev Takma adlar Eşdeğeri
extract_century(timestamp) — extract(century from timestamp)
extract_day(timestamp) toDayOfMonth, day extract(day from timestamp)
extract_decade(timestamp) — extract(decade from timestamp)
extract_dow(timestamp) — extract(dow from timestamp)
extract_doy(timestamp) toDayOfYear, dayofyear extract(doy from timestamp)
extract_hour(timestamp) toHour, hour extract(hour from timestamp)
extract_isodow(timestamp) dayofweek_iso extract(isodow from timestamp)
extract_isoweek(timestamp) toIsoWeek, week_iso extract(week from timestamp)
extract_minute(timestamp) toMinute, minute extract(minute from timestamp)
extract_month(timestamp) toMonth, month extract(month from timestamp)
extract_quarter(timestamp) toQuarter, quarter extract(quarter from timestamp)
extract_second(timestamp) toSecond, second extract(second from timestamp)
extract_year(timestamp) toYear, year extract(year from timestamp)

DATE_PART

Bir zaman damgasından alt alan çıkarır. DATE_PART işlevi, EXTRACT ile eşdeğerdir.

Söz dizimi

DATE_PART(<str> TEXT, <d> TIMESTAMP)

Parametreler

Parametre Açıklama
str Çıkarılacak alt alan. Geçerli değerler: century, day, decade, dow, isodow, doy, epoch, hour, minute, month, quarter, second, week, year.
d Tarih/saat ifadesi.

Dönüş türü: DOUBLE PRECISION

Örnekler

Zaman damgasından saat bilgisini alın:

SELECT DATE_PART('hour', timestamp '2001-02-16 16:38:40');

Sonuç:

 date_part
-----------
        16

Bir tarih için ISO hafta numarasını alın:

SELECT DATE_PART('week', TO_DATE('2022-10-11', 'YYYY-MM-DD'));

Sonuç:

 date_part
-----------
        41

Bir tarih için ay numarasını alın:

SELECT DATE_PART('month', TO_DATE('2022-10-11', 'YYYY-MM-DD'));

Sonuç:

 date_part
-----------
        10

DATE_TRUNC

Bir tarih veya saat değerini belirtilen hassasiyete göre kırpma işlemine tabi tutar.

Söz dizimi

DATE_TRUNC(<str> TEXT, <d> TIME | TIMESTAMP | TIMESTAMPTZ)

Parametreler

Parametre Açıklama
str Kırpma hassasiyeti. Geçerli değerler: century, decade, year, quarter, month, week, day, hour, minute, second.
d Kırpılacak tarih veya saat değeri.

Dönüş türü: Giriş türüyle eşleşen TIMESTAMP veya TIMESTAMPTZ.

Örnekler

Bir saati saat hassasiyetine kırpın:

SELECT DATE_TRUNC('hour', time '12:38:40');

Sonuç:

 date_trunc
------------
 12:00:00

Bir zaman damgasını gün hassasiyetine kırpın:

SELECT DATE_TRUNC('day', timestamptz '2001-02-16 20:38:40+08');

Sonuç:

       date_trunc
------------------------
 2001-02-16 00:00:00+08

Bir zaman damgasını ay hassasiyetine kırpın:

SELECT DATE_TRUNC('month', timestamp '2001-02-16 18:38:40');

Sonuç:

     date_trunc
---------------------
 2001-02-01 00:00:00

Mevcut ayın ilk gününü saat 12:00 olarak alın:

SELECT DATE_TRUNC('month', now()) + interval '12h';

Sonuç:

       ?column?
---------------------
 2024-08-01 12:00:00+08

Mevcut günü saat 09:00 olarak alın:

SELECT DATE_TRUNC('day', now()) + interval '9h';

Sonuç:

       ?column?
------------------------
 2024-08-08 09:00:00+08

Takip eden haftadaki aynı haftanın gününün başlangıcını alın:

SELECT DATE_TRUNC('day', now()) + interval '7d';

Sonuç:

       ?column?
------------------------
 2024-08-15 00:00:00+08

LAST_DAY

Belirtilen bir tarihin ait olduğu ayın son gününü döndürür. Varsayılan zaman aralığı: 1925–2282.

Söz dizimi

LAST_DAY(DATE | TIMESTAMP | TIMESTAMPTZ)

Dönüş türü: DATE

Kullanım notları

  • Hologres V2.0.31–V2.1.0 ve V2.1.13 ile sonraki sürümlerde kullanılabilir.

  • Yazma işlemlerinde bağımsız değişkenlerin tamamı sabit değer olamaz.

Örnek

CREATE TABLE test_last_day (a TIMESTAMP);
INSERT INTO test_last_day VALUES ('2004-02-28 00:00:00');

SELECT LAST_DAY(a) FROM test_last_day;

Sonuç:

  last_day
------------
 2004-02-29

ORACLE_LAST_DAY

Belirtilen bir tarihin ait olduğu ayın son gününü döndürür. Bu, orafce uzantısını gerektiren Oracle uyumlu bir işlevdir. Varsayılan zaman aralığı: 1925–2282. Daha fazla bilgi için bkz. Desteklenen Oracle işlevleri.

Söz dizimi

ORACLE_LAST_DAY(DATE)

Dönüş türü: DATE

Örnek

SELECT ORACLE_LAST_DAY('2022-05-01');

Sonuç:

 oracle_last_day
-----------------
 2022-05-31

TRUNC

Bir tarihi veya zaman damgasını belirtilen hassasiyete göre kırpma işlemine tabi tutar. Bu, orafce uzantısını gerektiren Oracle uyumlu bir işlevdir. Daha fazla bilgi için bkz. Desteklenen Oracle işlevleri.

Söz dizimi

TRUNC(<d> DATE | TIMESTAMP [, <str> TEXT])

Parametreler

Parametre Gerekli Açıklama
d Evet Kırpılacak tarih veya saat değeri. Bir TIMESTAMPTZ değeri geçirilirse saat kısmı 00:00:00 olarak ayarlanır.
str Hayır Kırpma hassasiyeti. Belirtilmezse varsayılan olarak gün bazında kırpılır. Y yılın ilk gününü, Q ise çeyreğin ilk gününü döndürür. Desteklenen tüm değerler için Oracle belgelerine bakın.

Dönüş türü: DATE veya TIMESTAMP

Örnekler

Bir tarihi yılın başlangıcına kırpın:

SELECT TRUNC('2022-05-22'::date, 'Y');

Sonuç:

   trunc
------------
 2022-01-01

Bir zaman damgasını yılın başlangıcına kırpın:

SELECT TRUNC('2022-05-22 13:11:22'::timestamp, 'Y');

Sonuç:

        trunc
---------------------
 2022-01-01 00:00:00

Bir zaman damgasını çeyreğin başlangıcına kırpın:

SELECT TRUNC('2022-05-22 13:11:22'::timestamp, 'Q');

Sonuç:

        trunc
---------------------
 2022-04-01 00:00:00

Bir zaman damgasını günün başlangıcına (varsayılan) kırpın:

SELECT TRUNC('2022-05-22 13:11:22'::timestamp);

Sonuç:

        trunc
---------------------
 2022-05-22 00:00:00

ROUND

Bir tarihi veya zaman damgasını en yakın zaman birimine yuvarlar. Bu, orafce uzantısını gerektiren Oracle uyumlu bir işlevdir. Daha fazla bilgi için bkz. Desteklenen Oracle işlevleri.

Söz dizimi

ROUND(<d> DATE | TIMESTAMPTZ [, <str> TEXT])

Parametreler

Parametre Gerekli Açıklama
d Evet Yuvarlanacak tarih veya saat değeri.
str Hayır Yuvarlama zaman birimi. Belirtilmezse varsayılan olarak gün bazında yuvarlanır. Y en yakın yılın ilk gününe yuvarlar. Desteklenen tüm değerler için Oracle belgelerine bakın.

Dönüş türü: DATE veya TIMESTAMP

Örnekler

Bir tarihi en yakın yıla yuvarlayın (1 Temmuz öncesi — aşağı yuvarlanır):

SELECT ROUND('2022-05-22'::date, 'Y');

Sonuç:

   round
------------
 2022-01-01

Bir tarihi en yakın yıla yuvarlayın (1 Temmuz sonrası — yukarı yuvarlanır):

SELECT ROUND('2022-07-22'::date, 'Y');

Sonuç:

   round
------------
 2023-01-01

Bir zaman damgasını en yakın yıla yuvarlayın:

SELECT ROUND('2022-07-22 13:11:22'::timestamp, 'Y');

Sonuç:

        round
---------------------
 2023-01-01 00:00:00

Bir zaman damgasını en yakın güne yuvarlayın (varsayılan):

SELECT ROUND('2022-02-22 13:11:22'::timestamp);

Sonuç:

        round
---------------------
 2022-02-23 00:00:00

Geçerli tarih/saat işlevleri

CURRENT_DATE

İşlem başlangıcındaki geçerli tarihi döndürür.

Söz dizimi

CURRENT_DATE

Dönüş türü: DATE

Örnek

SELECT CURRENT_DATE;

Sonuç:

 current_date
--------------
 2024-08-08

CURRENT_TIMESTAMP

Geçerli işlemin başlangıcındaki zaman damgasını döndürür. TRANSACTION_TIMESTAMP() ve NOW() işlevlerine eşdeğerdir.

Sözdizimi

CURRENT_TIMESTAMP
Dönen değer, tek bir işlem içinde değişmez.

Dönüş türü: TIMESTAMPTZ

Örnek

SELECT CURRENT_TIMESTAMP;

Sonuç:

       current_timestamp
-------------------------------
 2024-08-08 14:55:11.006068+08

CLOCK_TIMESTAMP

Gerçek geçerli saati döndürür.

Sözdizimi

clock_timestamp()
CURRENT_TIMESTAMP ve NOW() işlevlerinden farklı olarak, dönen değer aynı SQL ifadesi içinde bile her çağrıda değişir.

Dönüş türü: TIMESTAMPTZ

Örnek

SELECT clock_timestamp();

Sonuç:

        clock_timestamp
-------------------------------
 2024-08-08 14:57:43.569109+08

LOCALTIMESTAMP

Geçerli işlemin başlangıcındaki zaman damgasını saat dilimi bilgisi olmadan döndürür.

Sözdizimi

LOCALTIMESTAMP

Dönüş türü: TIMESTAMP

Örnek

SELECT LOCALTIMESTAMP;

Sonuç:

      localtimestamp
---------------------------
 2024-08-08 15:00:59.13245

NOW

Geçerli işlemin başlangıcındaki zaman damgasını döndürür. CURRENT_TIMESTAMP ve TRANSACTION_TIMESTAMP() işlevlerine eşdeğerdir.

Sözdizimi

NOW()
Dönen değer, tek bir işlem içinde değişmez.

Dönüş türü: TIMESTAMPTZ

Örnek

SELECT NOW();

Sonuç:

              now
-------------------------------
 2024-08-08 15:02:50.270501+08

STATEMENT_TIMESTAMP

Geçerli ifadenin başlangıcındaki zaman damgasını döndürür.

Sözdizimi

STATEMENT_TIMESTAMP()
Değer, tek bir ifade içinde tutarlıdır ancak aynı işlemdeki farklı ifadeler arasında değişiklik gösterir.

Dönüş türü: TIMESTAMPTZ

Örnek

SELECT STATEMENT_TIMESTAMP();

Sonuç:

      statement_timestamp
-------------------------------
 2024-08-08 15:06:14.772939+08

TIMEOFDAY

Gerçek geçerli saati biçimlendirilmiş bir metin dizesi olarak döndürür. CLOCK_TIMESTAMP() işlevine benzer ancak TIMESTAMPTZ yerine TEXT değeri döndürür.

Sözdizimi

TIMEOFDAY()

Dönüş türü: TEXT

Örnek

SELECT TIMEOFDAY();

Sonuç:

              timeofday
-------------------------------------
 Thu Aug 08 15:08:16.599369 2024 CST

TRANSACTION_TIMESTAMP

Geçerli işlemin başlangıcındaki zaman damgasını döndürür. CURRENT_TIMESTAMP ve NOW() işlevlerine eşdeğerdir.

Sözdizimi

TRANSACTION_TIMESTAMP()
Dönen değer, tek bir işlem içinde değişmez.

Dönüş türü: TIMESTAMPTZ

Örnek

SELECT TRANSACTION_TIMESTAMP();

Sonuç:

     transaction_timestamp
-------------------------------
 2024-08-08 15:11:10.329005+08

Diğer işlevler

ISFINITE

Bir tarihin veya zaman damgasının sonlu olup olmadığını (infinity veya -infinity olmadığını) test eder.

Sözdizimi

ISFINITE(DATE)
ISFINITE(TIMESTAMP)

Dönüş türü: BOOLEAN — sonlu ise t, sonsuz ise f döndürür.

Örnekler

SELECT ISFINITE(date '2001-02-16');

Sonuç:

 isfinite
----------
 t
SELECT ISFINITE(timestamp '2001-02-16 21:28:30');

Sonuç:

 isfinite
----------
 t

Örnekler

Aşağıdaki örnekler, Hologres'teki yaygın tarih ve saat işlemlerini göstermektedir.

Geçerli zaman damgasına 2 saat ekleyin:

SELECT NOW() + interval '2 hour';

Sonuç:

           ?column?
-------------------------------
 2022-12-29 13:43:58.321104+08

Geçerli zaman damgası için Unix epoch zamanını alın:

SELECT EXTRACT(epoch FROM current_timestamp);

Sonuç:

     date_part
---------------------
 1672285506.296279

Bir DATE değerini, ay sayısını temsil eden bir tamsayı sütunuyla toplayın:

CREATE TABLE date_test1(a DATE, b INT);
INSERT INTO date_test1 VALUES ('2021-09-28', '12');

SELECT a + (b || ' month')::interval FROM date_test1;

Sonuç:

       ?column?
--------------------
 2022-09-28 00:00:00

TO_CHAR ve TO_TIMESTAMP kullanarak sayısal bir dizeyi zaman damgasına dönüştürün:

SELECT TO_TIMESTAMP(TO_CHAR(20211027172045, '9999-99-99 99:99:99'), 'YYYY-MM-DD HH24:MI:SS');

Sonuç:

     to_timestamp
----------------------
 2021-10-27 17:20:45+08

Geçerli zaman damgasından ayı çıkarın:

SELECT EXTRACT(mon FROM now());

Sonuç:

 date_part
-----------
        12

İki tamsayıyı ondalık hassasiyetle bölün (önce float türüne dönüştürün):

-- Integer division discards the remainder: 10/3 = 3
-- Cast to float to get a decimal result
SELECT 10 / 3::float;

Sonuç:

       ?column?
---------
 3.3333333333333335