Bekerja dengan tipe data
Kolom dan variabel yang digunakan dalam T-SQL masing-masing memiliki tipe data. Perilaku nilai dalam ekspresi bergantung pada tipe data kolom atau variabel yang direferensikan. Misalnya, seperti yang Anda lihat sebelumnya, Anda dapat menggunakan+ operator untuk menggabungkan dua nilai string, atau untuk menambahkan dua nilai numerik.
Tabel berikut ini menunjukkan tipe data umum yang didukung dalam database SQL Server.
Exact Numeric
Approximate Numeric
karakter
Tanggal/Waktu
Biner
Lainnya
tinyint
float
char
date
biner
cursor
smallint
real
varchar
waktu
varbinary
hierarkiid
int
text
datetime
gambar
aql_variant
bigint
nchar
tanggalwaktu2
tabel
bit
nvarchar
smalldatetime
rentang waktu
decimal/numeric
ntext
tanggalwaktulewat
uniqueidentifier
numeric
xml
money
geografi
smallmoney
geometry
Catatan
Untuk detail selengkapnya tentang berbagai jenis data dan atributnya, kunjungi dokumentasi referensi Transact-SQL.
Konversi tipe data
Nilai jenis data yang kompatibel dapat secara implisit dikonversi sesuai kebutuhan. Misalnya, Anda dapat menggunakan + operator untuk menambahkan bilangan bulat ke angka desimal, atau untuk menggabungkan nilai char dengan panjang tetap dan nilai varchar dengan panjang variabel. Namun, dalam beberapa kasus, Anda mungkin perlu secara eksplisit mengonversi nilai dari satu jenis data ke jenis data lainnya - misalnya, mencoba menggunakan + untuk menggabungkan nilai varchar dan nilai desimal akan menghasilkan kesalahan, kecuali Anda terlebih dahulu mengonversi nilai numerik ke jenis data string yang kompatibel.
Catatan
Konversi implisit dan eksplisit berlaku untuk jenis data tertentu, dan beberapa konversi tidak dimungkinkan. Untuk informasi selengkapnya, gunakan bagan di dokumentasi referensi Transact-SQL.
T-SQL menyertakan fungsi untuk membantu Anda secara eksplisit mengonversi antar jenis data
CAST dan TRY_CAST
Fungsi CAST mengonversi nilai menjadi tipe data tertentu jika nilai kompatibel dengan tipe data target. Kesalahan akan dikembalikan jika tidak kompatibel.
Misalnya, kueri berikut ini menggunakan CAST untuk mengonversi nilai bilangan bulat di kolom ProductID menjadi nilaivarchar (dengan maksimum 4 karakter) untuk menggabungkannya dengan nilai berbasis karakter lain:
SELECT CAST(ProductID AS varchar(4)) + ': ' + Name AS ProductName
FROM Production.Product;
Hasil dari kueri ini mungkin terlihat seperti berikut ini:
ProductName
680: HL Road Frame - Black, 58
706: HL Road Frame - Red, 58
707: Sport-100 Helmet, Red
708: Sport-100 Helmet, Black
...
Namun, misalkan kolomUkuran pada tabel Production.Product adalah kolom nvarchar (panjang variabel, data teks Unicode) yang berisi beberapa ukuran numerik (seperti 58) dan beberapa ukuran berbasis teks (seperti "S", "M", atau "L"). Kueri berikut ini mencoba mengonversi nilai dari kolom ini menjadi tipe data bilangan bulat:
SELECT CAST(Size AS integer) As NumericSize
FROM Production.Product;
Kueri ini menghasilkan pesan galat berikut ini:
Kesalahan: Konversi gagal saat mengonversi nilai nvarchar ‘M’ menjadi tipe data int.
Mengingat bahwa setidaknya beberapa nilai dalam kolom merupakan numerik, Anda mungkin ingin mengonversi nilai tersebut dan mengabaikan yang lain. Anda dapat menggunakan fungsi TRY_CAST untuk mengonversi tipe data.
SELECT TRY_CAST(Size AS integer) As NumericSize
FROM Production.Product;
Kali ini hasilnya mungkin terlihat seperti ini:
NumericSize
58
58
NULL
NULL
...
Nilai yang dapat dikonversi menjadi tipe data numerik dikembalikan menjadi nilai desimal, dan nilai yang tidak kompatibel dikembalikan menjadi NULL, yang digunakan untuk menunjukkan bahwa nilai tidak diketahui.
Catatan
Kami akan mengeksplorasi pertimbangan untuk menangani nilai NULL nanti di unit ini.
CONVERT dan TRY_CONVERT
CAST adalah fungsi SQL standar ANSI untuk mengonversi antar tipe data, dan digunakan dalam banyak sistem database. Dalam T-SQL, Anda juga dapat menggunakan fungsi CONVERT, seperti yang ditunjukkan di sini:
SELECT CONVERT(varchar(4), ProductID) + ': ' + Name AS ProductName
FROM Production.Product;
Sekali lagi, kueri ini mengembalikan nilai yang dikonversi ke tipe data yang ditentukan, seperti ini:
ProductName
680: HL Road Frame - Black, 58
706: HL Road Frame - Red, 58
707: Sport-100 Helmet, Red
708: Sport-100 Helmet, Black
...
Seperti CAST, CONVERT memiliki varian TRY_CONVERT yang menampilkan NULL untuk nilai yang tidak kompatibel.
Manfaat lain menggunakan CONVERT daripada CAST adalah CONVERT juga menyertakan parameter yang memungkinkan Anda menentukan gaya format saat mengonversi nilai numerik dan tanggal menjadi string. Misalnya, pertimbangkan kueri di bawah ini:
SELECT SellStartDate,
CONVERT(varchar(20), SellStartDate) AS StartDate,
CONVERT(varchar(10), SellStartDate, 101) AS FormattedStartDate
FROM SalesLT.Product;
Hasil dari kueri ini mungkin terlihat seperti ini:
SellStartDate
StartDate
FormattedStartDate
2002-06-01T00:00:00.0000000
1 Jun 2002 12:00
1/6/2002
2002-06-01T00:00:00.0000000
1 Jun 2002 12:00
1/6/2002
2005-07-01T00:00:00.0000000
1 Jul 2005 12:00
1/7/2005
2005-07-01T00:00:00.0000000
1 Jul 2005 12:00
1/7/2005
...
...
...
Catatan
Untuk mengetahui selengkapnya tentang kode pemformatan gaya yang dapat Anda gunakan dengan CONVERT, lihatdokumentasi referensi Transact-SQL.
PARSE dan TRY_PARSE
Fungsi PARSE dirancang untuk mengonversi string berformat yang mewakili nilai numerik atau tanggal/waktu. Secagai contoh, pertimbangkan kueri berikut (yang menggunakan nilai literal daripada nilai dari kolom dalam tabel):
SELECT PARSE('01/01/2021' AS date) AS DateValue,
PARSE('$199.99' AS money) AS MoneyValue;
Hasil kueri terlihat seperti ini:
DateValue
MoneyValue
2021-01-01T00:00:00.0000000
199.99
Sama halnya dengan CAST dan CONVERT, PARSE memiliki varian TRY_PARSE yang mengembalikan nilai yang tidak kompatibel dengan NULL.
Catatan
Saat bekerja dengan jenis data desimal atau numerik, Anda mungkin perlu membulatkan ke bilangan bulat atau mengatur titik desimal, yang dapat dicapai melalui presisi dan skala. Untuk lebih memahami konsep presisi dan skala ini, lihatdokumentasi referensi Transact-SQL.
STR
Fungsi STR mengonversi nilai numerik menjadi varchar.
Contohnya:
SELECT ProductID, '$' + STR(ListPrice) AS Price
FROM Production.Product;
Hasilnya akan terlihat seperti ini:
ProductID
Harga
680
$1432.00
706
$1432.00
707
$35.00
...
...