Ana içeriğe geç
Kesit SQL
Temel · Fonksiyonlar

Sayılar, veri tipleri ve CAST

ROUND, tam sayı bölmesi tuzağı (SQL türüne göre değişir) ve tip dönüşümü.

Uygulamada aç, 8 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Sayısal fonksiyonlar

FonksiyonAçıklama
ROUND(x, n)n basamağa yuvarla
ABS(x)Mutlak değer
CEILING(x) / CEIL(x), FLOOR(x)Yukarı / aşağı yuvarla
x % y (Oracle: MOD(x, y))Bölümden kalan
POWER(x, y), SQRT(x)Üs, karekök

Tam sayı bölmesi: aynı sorgu, farklı sonuç

İki tam sayıyı böldüğünde sonuç SQL türüne göre değişir. Aşağıdaki sorguyu çalıştır, sonra SQL türü sekmesini değiştirip tekrar çalıştır:

SELECT 7 / 2 AS tam_bolme,
       7 / 2.0 AS ondalikli,
       CAST(7 AS REAL) / 2 AS cast_ile;
SQL türü7 / 2
SQL Server, PostgreSQL, SQLite3 (tam sayı bölmesi)
MySQL, Oracle3.5 (MySQL'de tam sayı bölmesi için DIV)

Oran hesaplarken (dönüşüm oranı, yüzde) bu hata çok yaygındır. Güvenli yol, payı ondalıklı yapmaktır: 100.0 * pay / payda. Böylece her SQL türünde aynı sonucu alırsın.

Veri tipleri

Genel tipSQL ServerPostgreSQLMySQLOracle
Tam sayıINT, BIGINTINTEGER, BIGINTINT, BIGINTNUMBER(10)
Para / kesin ondalıkDECIMAL(12,2)NUMERIC(12,2)DECIMAL(12,2)NUMBER(12,2)
Yaklaşık ondalıkFLOATDOUBLE PRECISIONDOUBLEBINARY_DOUBLE
MetinNVARCHAR(n)VARCHAR(n), TEXTVARCHAR(n)VARCHAR2(n)
Tarih / zamanDATE, DATETIME2DATE, TIMESTAMPDATE, DATETIMEDATE, TIMESTAMP
MantıksalBITBOOLEANBOOLEAN (TINYINT)NUMBER(1) (23ai: BOOLEAN)
SQLite'ın esnek tipleriSQLite'ta yalnızca 5 depolama sınıfı vardır (NULL, INTEGER, REAL, TEXT, BLOB) ve tarihler metin olarak saklanır. Diğer SQL türleri tiplerde çok daha katıdır.

CAST ile dönüşüm

SELECT name,
       CAST(price AS INTEGER) AS tam_fiyat,
       CAST(stock AS TEXT) || ' adet' AS stok_metni
FROM products
LIMIT 3;
SQL Server'daCONVERT(tip, değer, stil) ve hata vermek yerine NULL döndüren TRY_CAST / TRY_CONVERT da vardır. Ayrıntılar T-SQL modülünde.
Ondalığı tam sayıya çevirmekSQL Server ve SQLite CAST(2.7 AS INT) sonucunu 2'ye keser; PostgreSQL, MySQL ve Oracle 3'e yuvarlar. Niyetin buysa açıkça FLOOR veya ROUND kullan.
Alıştırmalara geç (8)