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çinAT TIME ZONEifadesini 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ı
Sonuç saat dilimi ofsetini içerir (örneğin,
+08).Desteklenen zaman aralığını 1925–2282 dışına genişletmek için bkz. Genişletilmiş zaman aralığı desteği.
Ö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
0döndürür. Örneğin,2023-12-31ile2024-01-01arasındaki yıl farkı0olur.-
Bunun yerine sınır geçişlerini saymak için (önceki örnekte
1dö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ör | Sol işlenen | Sağ işlenen | Açıklama | Örnek | Sonuç |
|---|---|---|---|---|---|
+ | DATE | INTEGER | Bir tarihe gün ekler. | date '2001-09-28' + integer '7' | 2001-10-05 |
+ | DATE | TIME | Bir tarih ve saati birleştirerek zaman damgası oluşturur. | date '2001-09-28' + time '03:00' | 2001-09-28 03:00:00 |
+ | DATE | INTERVAL | Bir tarihe aralık ekler. | date '2001-09-28' + interval '1 hour' | 2001-09-28 01:00:00 |
+ | TIMESTAMPTZ | INTERVAL | Bir zaman damgasına aralık ekler. | now() + interval '1 day' | 2022-12-08 20:09:19+08 |
- | DATE | DATE | İki tarih arasındaki gün sayısını tamsayı olarak döndürür. | date '2001-10-01' - date '2001-09-28' | 3 |
- | DATE | INTEGER | Bir tarihten gün çıkarır. | date '2001-10-01' - integer '7' | 2001-09-24 |
- | DATE | TIME | Bir tarihten saat çıkararak zaman damgası oluşturur. | date '2001-09-28' - time '03:00' | 2001-09-27 21:00:00 |
- | DATE | INTERVAL | Bir tarihten aralık çıkarır. | date '2001-09-28' - interval '1 hour' | 2001-09-27 23:00:00 |
- | TIMESTAMPTZ | INTERVAL | Bir zaman damgasından aralık çıkarır. | now() - interval '2 day' | 2022-12-06 20:27:21+08 |
* | INTEGER | INTERVAL | Bir aralığı çarpar. | 21 * interval '3 day' | 0 years 0 mons 63 days 0 hours 0 mins 0.0 secs |
/ | INTERVAL | DOUBLE PRECISION | Bir 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_TIMESTAMPveNOW()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