|
<< İçindekileri Görüntülemek İçin Tıklayın >> Yer: Teknik Kılavuzlar > IVEDI SQL Kullanıcı Kılavuzu > 5. Operatörler ve yerleşik fonksiyonlar > 5.1 Operatörler |
Tekli - ve ikili + - * / % operatörlerinin hepsi altı sayısal tip için
tanımlıdır ve operand tipini korur:
integer, bigint, int128, double,
decimal, number. Tekli - iki interval tipi için de tanımlıdır;
interval aritmetiğinin kalanı bir sonraki tabloda verilir.
Tip korunduğu için tam sayı bölmesi tam sayı verir: 7 / 2 sonucu
3'tür, 3.5 değil. Kesirli sonuç isteniyorsa operandlardan biri
ondalıklı olmalıdır (7 / 2.0) ya da açıkça dönüştürülmelidir.
Bu ailede her tipin adım birimi farklıdır. Tablodaki birim sütunu bu yüzden önemlidir.
| İfade | Sonuç | Sağ operandın / sonucun birimi |
|---|---|---|
date + integer, date - integer | date | gün |
date - date | double | gün |
time + integer, time - integer | time | tik (100 ns), döngüsel |
time + double, time - double | time | gün, kesirli, döngüsel |
time - time | double | gün, kesirli |
timestamp + double, timestamp - double | timestamp | gün, kesirli |
timestamp - timestamp | double | gün, kesirli |
timestamp - date, date - timestamp | double | gün, kesirli; date operandı gece yarısı sayılır |
date + time, time + date | timestamp | birleştirme, toplama değil |
timestamp ± <DS interval> | timestamp | tik ofseti |
date ± <DS interval> | timestamp | interval günün saatini taşıyabilir, sonuç daraltılmaz |
time ± <DS interval> | time | döngüsel |
timestamp ± <YM interval> | timestamp | takvim ayı; gün kırpılır (31 Ocak + 1 ay = 28/29 Şubat) |
date ± <YM interval> | date | tam aylar bir tarihi başka bir tarihe taşır |
<interval> ± <interval> | interval | yalnızca aynı aile içinde |
<interval> * <sayı>, <sayı> * <interval>, <interval> / <sayı> | interval | çarpan double, kesirli olabilir; ölçekleme intervalin kendi sayımı üzerindedir |
Her tarih/saat farkı gün cinsinden bir double döndürür ve toplamanın tam tersidir:
t1 + (t2 - t1) = t2. integer ve double ile toplama her iki sırada da
tanımlıdır (integer + date, double + timestamp); yalnız time + double
tek sırada vardır. Interval toplamalarında interval sağ operanddır. Bu ailenin dışındaki karışımlar
reddedilir:
timestamp '2020-01-15 10:00:00' - time '06:00:00'
-- Syntax error 'no operator - for operands of type TIMESTAMP and TIME'timestamp + time ve timestamp - time reddedilir:
Syntax error 'no operator + for operands of type TIMESTAMP and TIME'. SQL standardı
böyle bir işleç tanımlamaz; PostgreSQL ve Firebird de reddeder.
Yazım date + time birleştirmesine de düşmez. TIMESTAMP, DATE'e atanabildiği için
düşseydi TIMESTAMP kendi tarihine kırpılır ve günün saati sağ operandla sessizce
değiştirilirdi. O aşırı yüklemenin DATE parametresi bu yüzden sabitlenmiştir
(&date: parametre yalnız tam o tipi kabul eder); çift hiçbir aşırı yüklemeye uymaz ve
açıkça reddedilir.
Bir timestamp'e süre eklemek için bir DS interval (ts + interval '0 06:00:00' day to
second), DATEADD ya da gün cinsinden + double kullanılır.
| Operatör | Notlar |
|---|---|
= <> > < >= <= |
11 tip için tanımlı: altı sayısal tip, timestamp, date,
time, string, variant. Dizgi karşılaştırması operandın
harmanlamasını (yoksa veritabanınınkini) uygular. |
<op> ANY (…) / <op> ALL (…) |
Sağ taraf bir değer listesi ya da bir alt sorgudur. Aynı 11 tip.
Alt sorgulu biçim alt sorgunun bütün satırları üzerinde çalışır; IN (…) de aynı yolu kullanır. |
BETWEEN a AND b | Aynı 11 tip. |
IS [NOT] NULL | Her tip (variant parametresi). |
IS [NOT] DISTINCT FROM | NULL-güvenli karşılaştırma; iki NULL eşit sayılır. |
LIKE … [ESCAPE …] | string, clob, variant. |
SIMILAR TO … [ESCAPE …] | SQL düzenli ifade kalıbı; aynı üç tip. |
STARTING [WITH] <önek> | Önek karşılaştırması (lehçeye özgü); aynı üç tip. |
CONTAINING <alt dizgi> | İçerme karşılaştırması (lehçeye özgü); aynı üç tip. |
NOT, AND, OR, XOR |
AND/OR/XOR sağ operandı gecikmeli değerlendirir. |
select 1 from dual where 3 = any (select v from t); -- alt sorgu, bütün satırlar
select 1 from dual where 3 = any (1, 2, 3); -- değer listesi
select 1 from dual where 999 <> all (select v from t);| Operatör | Notlar |
|---|---|
|| | Birleştirme. Operandlardan biri CLOB ise sonuç CLOB olur. |
& | ^ ~ |
Yalnızca integer, bigint, int128. |
<< >> |
Sol operand tam sayı tiplerinden biri, sağ operand (kaydırma sayısı) integer. |
COLLATE <ad> | Bkz. Sınır kutusu. |
Bit operatörlerinin ondalıklı tip aşırı yüklemesi bilinçli olarak yoktur.
Sabit noktalı bir değerin bitleri, o değerin gösterdiği sayının bitleri değildir; bir NUMBER
operandı bit işlemine girerken önce int128'e dönüştürülür.
İfade düzeyindeki COLLATE operatörü etkisizdir: uygulaması ilk operandını
değiştirmeden döndürür, harmanlama argümanı yok sayılır. Harmanlama kolon ve domain
bildirimindeki COLLATE yan tümcesiyle verilir (bkz. bölüm 6); karşılaştırma operatörleri,
ORDER BY, UPPER/LOWER ve bellek motorunun ikincil indeksi
bildirilen harmanlamayı uygular.