2.3 Sabitler (literaller)

<< İçindekileri Görüntülemek İçin Tıklayın >>

Yer:  Teknik Kılavuzlar > IVEDI SQL Kullanıcı Kılavuzu > 2. Sözlüksel yapı >

2.3 Sabitler (literaller)

2.3.1 Karakter dizisi sabitleri

Dört biçim vardır. Önek harfi tırnakla bitişik yazılır.

Düz biçim: '…'

İçindeki tırnak ikilenerek yazılır. Sabit satır sonunda kapanmamışsa sonraki satıra devam eder. Birbirini izleyen iki düz sabit birleştirilir; aralarına yorum girebilir:

'O''Brien'                        -- O'Brien
'uzun bir metnin '  /* yorum */  'devamı'

Kaçış işleyen biçim: c'…' (ya da e'…')

KaçışAnlamı
\r \n \f \v \t \a \b \\Alışıldık denetim karakterleri
\0 … \7771–3 sekizlik basamak
\xHHTam iki onaltılık basamak, tek bayt
\uXXXXDört basamaklı kod noktası
\UXXXXXXXXSekiz basamaklı kod noktası

Tanınmayan bir kaçış, karakterin kendisi olarak yazılır. '' ikilemesi bu biçimde de çalışır.

Dikkat

Kaçışlar yalnızca c'…' biçiminde işlenir. Düz '\t42' dört karakterdir (ters bölü, t, 4, 2), sekme değil. Bu, fark edilmesi zor bir hata kaynağıdır.

Alternatif tırnak: q'<ayırıcı>…<ayırıcı>'

İçinde hiçbir kaçış işlenmez ve tırnak ikilemek gerekmez. Ayırıcı tek bir karakterdir; dört köşeli ayırıcı kendiliğinden eşlenir: {→}, (→), [→], <→>. Öteki karakterler kendileriyle kapanır.

q'`create domain d as char default 'C'`'
q'{ içinde ' ve " serbest }'

İçinde tırnak geçen SQL metnini bir dizgi olarak taşımanın en temiz yolu budur; ters tırnak (`) bu lehçede başka hiçbir anlam taşımadığı için güvenli bir ayırıcıdır.

Onaltılık bayt dizisi: x'…'

Onaltılık basamak çiftleri; baytlar arasında boşluk ve satır sonu serbesttir. Sonuç bir ham bayt dizisidir (karakter kümesi yoktur).

x'48656C6C6F'      -- "Hello"
x'12 23 34'        -- boşluklar yok sayılır
Sınır

İkili basamaklı b'…' biçimi ve karakter kümesini zorlayan _<karakterkümesi>'…' öneki yoktur.

2.3.2 Tipli sabitler

Bir tip adının hemen ardından bir karakter dizisi sabiti gelirse değer o tipte okunur:

YazımBeklenen biçimNotlar
date '…'yyyy-MM-dd
time '…'HH:mm:ss
time_tz '…'HH:mm:ss+TZ
timestamp '…'yyyy-MM-dd HH:mm:ss
timestamp_tz '…'yyyy-MM-dd HH:mm:ss+TZ
boolean '…'TRUE T YES Y ON 1 / FALSE F NO N OFF 0Büyük/küçük harf duyarsız
guid '…'32 basamak, 8-4-4-4-12, {…} ya da (…)Biçim kendiliğinden algılanır
interval '…' <niteleyici>Niteleyicinin adlandırdığı alanlarStandart yazım; bkz. 3.4
interval_ds '…'dd HH:mm:ssMetin herhangi bir alandan sonra bitebilir
interval_ym '…'yy-MMMetin herhangi bir alandan sonra bitebilir
Not

Standart interval '…' <niteleyici> yazımında metin, niteleyicinin adlandırdığı alanları tam olarak taşır: interval '5 12:30:45' day to second, interval '5' day, interval '3-4' year to month. Eksik ya da fazla alan INVALID_TYPE_CONVERSION verir. interval_ds / interval_ym önekli yazımlar daha hoşgörülüdür: metin tamamlanmış herhangi bir alandan sonra bitebilir (interval_ds '5' beş gündür, interval_ds '1 02' bir gün iki saattir).

2.3.3 Sayı sabitleri

Bir sayı sabitinin tipi yazımına göre belirlenir:

YazımTipiKural
42INTEGERint32'ye sığan tam sayı
3000000000BIGINTint32'ye sığmayan tam sayı
4.57DOUBLE PRECISIONOndalık ayırıcı içeren sabit
1.5e3DOUBLE PRECISIONÜs içeren her sabit (SQL:2011 5.3: yaklaşık sayı sabiti)
4.57mNUMBERM soneki
19+ karakterli sabitNUMBERÜs içermeyen, 18 karakterden uzun her sabit
0x1FINTEGER / NUMBEROnaltılık; 18 karakterden uzunsa NUMBER
Dikkat

4.57 bir DOUBLE'dır, sabit noktalı bir değer değil. Bu yüzden bir NUMBER değişkenle doğrudan karşılaştırıldığında ikisi son bitlerde ayrılabilir ve eşit çıkmaz; ikisi de 4.57 yazdırdığı hâlde. Sabit noktalı bir sabit için M soneki kullanılır (4.57m) ya da değer açıkça dönüştürülür. 4.25 gibi ikilik tabanda tam gösterilebilen değerlerde sorun görünmediği için bu tuzak aralıklı ortaya çıkar.

F ve D sonekleri sabiti DOUBLE yapar (42f de bir DOUBLE'dır); L ve U sonekleri kabul edilir ama tipi değiştirmez. Bir sayı sabitinden hemen sonra sözcük karakteri gelirse hata verilir: 12abc geçersizdir.

1..5 yazımı 1 ve .. olarak ayrıştırılır; aralık yazımı ile ondalık ayırıcı çakışmaz.

Not

Ondalık ayırıcı her zaman noktadır ve makinenin yerel ayarından etkilenmez. Bu, hem sayı sabitleri hem de metin ⇄ sayı dönüşümleri için geçerlidir: cast('4.25' as double precision) ondalık ayırıcısı virgül olan bir işletim sistemi yerelinde de çalışır ve cast(4.25 as string) '4.25' verir, '4,25' değil. Sayı sabitlerinde binlik ayırıcı yoktur.

Bunun sebebi lehçenin taşınabilir olması gereğidir: aynı betik farklı yerellerdeki makinelerde aynı sonucu verir. Yerel ayar; tarih biçimleri, ay/gün adları ve para birimi gibi sunum alanlarını etkiler, sayı ayırıcılarını etkilemez. Yerel ayar SQL'den değiştirilemez (bkz. 9.4).

2.3.4 Mantıksal ve NULL

NULL, TRUE, FALSE ve UNKNOWN anahtar sözcüklerdir. Test için IS [NOT] NULL, IS [NOT] TRUE|FALSE|UNKNOWN ve IS [NOT] DISTINCT FROM yazımları vardır.