5.1 Operatörler

<< İç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

5.1.1 Aritmetik

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.

Dikkat

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.

5.1.2 Tarih ve saat aritmetiği

Bu ailede her tipin adım birimi farklıdır. Tablodaki birim sütunu bu yüzden önemlidir.

İfadeSonuçSağ operandın / sonucun birimi
date + integer, date - integerdategün
date - datedoublegün
time + integer, time - integertimetik (100 ns), döngüsel
time + double, time - doubletimegün, kesirli, döngüsel
time - timedoublegün, kesirli
timestamp + double, timestamp - doubletimestampgün, kesirli
timestamp - timestampdoublegün, kesirli
timestamp - date, date - timestampdoublegün, kesirli; date operandı gece yarısı sayılır
date + time, time + datetimestampbirleştirme, toplama değil
timestamp ± <DS interval>timestamptik ofseti
date ± <DS interval>timestampinterval günün saatini taşıyabilir, sonuç daraltılmaz
time ± <DS interval>timedöngüsel
timestamp ± <YM interval>timestamptakvim ayı; gün kırpılır (31 Ocak + 1 ay = 28/29 Şubat)
date ± <YM interval>datetam aylar bir tarihi başka bir tarihe taşır
<interval> ± <interval>intervalyalnı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'
Dikkat

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.

5.1.3 Karşılaştırma ve mantık

OperatörNotlar
= <> > < >= <= 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 bAynı 11 tip.
IS [NOT] NULLHer tip (variant parametresi).
IS [NOT] DISTINCT FROMNULL-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);

5.1.4 Dizgi ve bit operatörleri

OperatörNotlar
||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.
Not

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.

Sını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.