Gunakan fungsi bernilai skalar
Fungsi bernilai skalar mengembalikan satu nilai dan biasanya bekerja pada satu baris data. Jumlah nilai input yang diambil dapat nol (misalnya, GETDATE), satu (misalnya, UPPER), atau kelipatan (misalnya, ROUND). Karena fungsi bernilai skalar selalu mengembalikan nilai tunggal, mereka dapat digunakan di mana saja saat nilai tinggal (hasilnya) diperlukan. Mereka paling sering digunakan dalam klausa SELECT dan predikat klausa WHERE. Mereka juga dapat digunakan dalam klausa SET dari pernyataan UPDATE.
Fungsi bernilai skalar bawaan dapat diatur ke dalam banyak kategori, seperti string, konversi, logis, matematika, dan lain-lain. Modul ini akan melihat beberapa fungsi bernilai skalar umum.
Beberapa pertimbangan saat menggunakan fungsi bernilai skalar meliputi:
- Determinisme: Jika fungsi mengembalikan nilai yang sama untuk status input dan database yang sama setiap kali dipanggil, kami menyebutnya deterministik. Misalnya, ROUND(1.1, 0) selalu mengembalikan nilai 1.0. Banyak fungsi bawaan yang tidak menentukan. Misalnya, GETDATE () mengembalikan tanggal dan waktu saat ini. Hasil dari fungsi nondeterministik tidak dapat diindeks, yang mempengaruhi kemampuan prosesor kueri untuk menghasilkan rencana yang baik untuk mengeksekusi kueri.
- Kolase: Saat menggunakan fungsi yang memanipulasi data karakter, kolase mana yang akan digunakan? Beberapa fungsi menggunakan kolase (urutan sortir) dari nilai input; yang lain menggunakan kolase database jika tidak ada kolase input yang disediakan.
Contoh fungsi bernilai skalar
Pada saat penulisan, Dokumentasi Teknis SQL Server mencantumkan lebih dari 200 fungsi bernilai skalar yang mencakup beberapa kategori, termasuk:
- Fungsi konfigurasi
- Fungsi konversi
- Fungsi kursor
- Fungsi Tanggal dan Waktu
- Fungsi Matematika
- Fungsi metadata
- Fungsi keamanan
- Fungsi string
- Fungsi sistem
- Fungsi Statistik Sistem
- Fungsi Teks dan Gambar
Kursus ini tidak memiliki cukup banyak waktu untuk menggambarkan setiap fungsi, tetapi contoh di bawah ini menunjukkan beberapa fungsi yang umum digunakan.
Contoh hipotetis berikut menggunakan beberapa fungsi tanggal dan waktu:
SELECT SalesOrderID,
OrderDate,
YEAR(OrderDate) AS OrderYear,
DATENAME(mm, OrderDate) AS OrderMonth,
DAY(OrderDate) AS OrderDay,
DATENAME(dw, OrderDate) AS OrderWeekDay,
DATEDIFF(yy,OrderDate, GETDATE()) AS YearsSinceOrder
FROM Sales.SalesOrderHeader;
Hasil parsial ditunjukkan di bawah ini:
ID Pesanan Penjualan
Tanggal Pemesanan
Tahun Pesanan
Bulan Pesanan
Hari Pemesanan
OrderWeekDay
TahunSejakPesanan
71774
2008-06-01T00:00:00
2008
Juni
1
Hari Minggu
13
...
...
...
...
...
...
...
Contoh berikutnya mencakup beberapa fungsi matematika:
SELECT TaxAmt,
ROUND(TaxAmt, 0) AS Rounded,
FLOOR(TaxAmt) AS Floor,
CEILING(TaxAmt) AS Ceiling,
SQUARE(TaxAmt) AS Squared,
SQRT(TaxAmt) AS Root,
LOG(TaxAmt) AS Log,
TaxAmt * RAND() AS Randomized
FROM Sales.SalesOrderHeader;
Hasil parsial:
TaxAmt
Dibulatkan
Lantai
ceiling
Kuadrat
Akar
Catatan
Acak
70,4279
70.0000
70.0000
71.0000
4960.089098
8.392133221
4.254589491
28.64120429
...
..
...
...
...
...
...
...
Contoh berikut menggunakan beberapa fungsi string:
SELECT CompanyName,
UPPER(CompanyName) AS UpperCase,
LOWER(CompanyName) AS LowerCase,
LEN(CompanyName) AS Length,
REVERSE(CompanyName) AS Reversed,
CHARINDEX(' ', CompanyName) AS FirstSpace,
LEFT(CompanyName, CHARINDEX(' ', CompanyName)) AS FirstWord,
SUBSTRING(CompanyName, CHARINDEX(' ', CompanyName) + 1, LEN(CompanyName)) AS RestOfName
FROM Sales.Customer;
Hasil parsial:
NamaPerusahaan
Huruf Besar
Huruf kecil
Panjang
Terbalik
FirstSpace
KataPertama
RestOfName
Toko Sepeda
TOKO SEPEDA
toko sepeda
12
erotS ekiB A
2
Sebuah
Toko Sepeda
Olahraga Progresif
OLAHRAGA PROGRESIF
olahraga progresif
18
stropS evissergorP
12
Progresif
Olahraga
Komponen Sepeda Tingkat Lanjut
KOMPONEN SEPEDA TINGKAT LANJUT
komponen sepeda tingkat lanjut
24
stnenopmoC ekiB decnavdA
9
Tingkat Lanjut
Komponen Sepeda
...
...
...
...
...
...
...
...
Fungsi logika
Kategori fungsi lain memungkinkan menentukan mana dari beberapa nilai yang akan dikembalikan. Fungsi logika mengevaluasi ekspresi input, dan mengembalikan nilai yang sesuai berdasarkan hasilnya.
IIF
Fungsi IIF mengevaluasi ekspresi input Boolean, dan mengembalikan nilai yang ditentukan jika ekspresi mengevaluasi ke Benar, dan nilai alternatif jika ekspresi mengevaluasi ke Salah.
Misalnya, pertimbangkan kueri berikut, yang mengevaluasi tipe alamat pelanggan. Jika nilainya adalah "Main Office", ekspresi akan mengembalikan "Penagihan". Untuk semua nilai jenis alamat lainnya, ekspresi akan mengembalikan "Mailing".
SELECT AddressType,
IIF(AddressType = 'Main Office', 'Billing', 'Mailing') AS UseAddressFor
FROM Sales.CustomerAddress;
Hasil parsial dari kueri ini mungkin terlihat seperti ini:
JenisAlamat
GunakanAddressFor
Office Utama
Penagihan
Pengiriman
Pengiriman
...
...
PILIH
Fungsi CHOOSE mengevaluasi ekspresi bilangan bulat, dan mengembalikan nilai terkait dari daftar berdasarkan posisi ordinal (berbasis 1).
SELECT SalesOrderID, Status,
CHOOSE(Status, 'Ordered', 'Shipped', 'Delivered') AS OrderStatus
FROM Sales.SalesOrderHeader;
Hasil dari kueri ini mungkin terlihat seperti ini:
ID Pesanan Penjualan
Kedudukan
Status Pesanan
1234
3
Dikirim
1235
2
Dikirim
1236
2
Dikirim
1237
1
Dipesan
...
...
...