Konversi jenis data (Mesin Database)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)Titik akhir analitik SQL di Microsoft FabricWarehouse di Microsoft Fabric

Jenis data dapat dikonversi dalam skenario berikut:

  • Ketika data dari satu objek dipindahkan ke, dibandingkan dengan, atau dikombinasikan dengan data dari objek lain, data mungkin harus dikonversi dari jenis data satu objek ke jenis data yang lain.
  • Ketika data dari kolom hasil Transact-SQL, kode pengembalian, atau parameter output dipindahkan ke variabel program, data harus dikonversi dari jenis data sistem SQL Server ke jenis data variabel.

Saat Anda mengonversi antara variabel aplikasi dan kolom kumpulan hasil SQL Server, kode pengembalian, parameter, atau penanda parameter, konversi jenis data yang didukung ditentukan oleh API database.

Konversi implisit dan eksplisit

Jenis data dapat dikonversi baik secara implisit maupun eksplisit.

Konversi implisit tidak terlihat oleh pengguna. SQL Server secara otomatis mengonversi data dari satu jenis data ke jenis data lainnya. Misalnya, ketika smallint dibandingkan dengan int, smallint secara implisit dikonversi ke int sebelum perbandingan berlanjut.

GETDATE() secara implisit mengonversi ke gaya0 tanggal. SYSDATETIME() secara implisit mengonversi ke gaya 21tanggal .

Konversi eksplisit menggunakan CAST fungsi atau CONVERT .

Fungsi CAST dan CONVERT mengonversi nilai (variabel lokal, kolom, atau ekspresi lain) dari satu jenis data ke jenis data lainnya. Misalnya, fungsi berikut CAST mengonversi nilai $157.27 numerik menjadi string '157.27'karakter :

CAST ( $157.27 AS VARCHAR(10) )  

Gunakan CAST alih-alih CONVERT jika Anda ingin kode program Transact-SQL mematuhi ISO. Gunakan CONVERT alih-alih CAST untuk memanfaatkan fungsionalitas gaya di CONVERT.

Ilustrasi berikut menunjukkan semua konversi jenis data eksplisit dan implisit yang diizinkan untuk jenis data yang disediakan sistem SQL Server. Ini termasuk xml, bigint, dan sql_variant. Tidak ada konversi implisit pada penugasan dari jenis data sql_variant , tetapi ada konversi implisit ke sql_variant.

Tabel terperinci yang berisi semua jenis data SQL di baris dan kolom, menunjukkan jenis konversi jenis data mana yang dimungkinkan.

Meskipun bagan sebelumnya menggambarkan semua konversi eksplisit dan implisit yang diizinkan di SQL Server, bagan tersebut tidak menunjukkan jenis data konversi yang dihasilkan.

  • Ketika SQL Server melakukan konversi eksplisit, pernyataan itu sendiri menentukan jenis data yang dihasilkan.
  • Untuk konversi implisit, pernyataan penugasan seperti mengatur nilai variabel atau menyisipkan nilai ke dalam kolom menghasilkan jenis data yang ditentukan oleh deklarasi variabel atau definisi kolom.
  • Untuk operator perbandingan atau ekspresi lain, jenis data yang dihasilkan tergantung pada aturan prioritas jenis data.

Sebagai contoh, skrip berikut mendefinisikan variabel jenis varchar, menetapkan nilai jenis int ke variabel, lalu memilih perangkaian variabel dengan string.

DECLARE @string VARCHAR(10);
SET @string = 1;
SELECT @string + ' is a string.'

Nilai int1 dikonversi ke varchar, sehingga SELECT pernyataan mengembalikan nilai 1 is a string..

Contoh berikut menunjukkan skrip serupa dengan variabel int sebagai gantinya:

DECLARE @notastring INT;
SET @notastring = '1';
SELECT @notastring + ' is not a string.'

Dalam hal ini, SELECT pernyataan melemparkan kesalahan berikut:

Msg 245, Level 16, State 1, Line 3 Conversion failed when converting the varchar value ' is not a string.' to data type int.

Untuk mengevaluasi ekspresi @notastring + ' is not a string.', SQL Server mengikuti aturan prioritas jenis data untuk menyelesaikan konversi implisit sebelum hasil ekspresi dapat dihitung. Karena int memiliki prioritas yang lebih tinggi daripada varchar, SQL Server mencoba mengonversi string menjadi bilangan bulat dan gagal karena string ini tidak dapat dikonversi ke bilangan bulat. Jika ekspresi menyediakan string yang dapat dikonversi, pernyataan berhasil, seperti dalam contoh berikut:

DECLARE @notastring INT;
SET @notastring = '1';
SELECT @notastring + '1'

Dalam hal ini, string 1 dapat dikonversi ke nilai 1bilangan bulat , sehingga pernyataan ini SELECT mengembalikan nilai 2. Operator + menjadi penambahan daripada perangkaian ketika jenis data yang disediakan adalah bilangan bulat.

Perilaku konversi jenis data

Beberapa konversi jenis data implisit dan eksplisit tidak didukung saat Anda mengonversi jenis data satu objek SQL Server ke objek lainnya. Misalnya, nilai nchar tidak dapat dikonversi ke nilai gambar . Nchar hanya dapat dikonversi ke biner dengan menggunakan konversi eksplisit. Konversi implisit ke biner tidak didukung. Namun, nchar dapat dikonversi secara eksplisit atau implisit ke nvarchar.

Artikel berikut ini menjelaskan perilaku konversi yang dipamerkan oleh jenis data yang sesuai:

Mengonversi jenis data dengan menggunakan prosedur tersimpan OLE Automation

Karena SQL Server menggunakan jenis data Transact-SQL dan OLE Automation menggunakan jenis data Visual Basic, prosedur tersimpan OLE Automation harus mengonversi data yang melewatinya.

Tabel berikut ini menjelaskan konversi jenis data SQL Server ke Visual Basic.

Tipe data SQL Server Jenis data Visual Basic
char, varchar, text, nvarchar, ntext String
desimal, numerik String
bit Boolean
biner, varbinary, image Array satu Byte() dimensi
int Long
smallint Bilangan bulat
kecil Byte
float Laju
real Satu
uang, smallmoney Mata Uang
datetime, smalldatetime Tanggal
Apa pun diatur ke NULL Varian diatur ke Null

Semua nilai SQL Server tunggal dikonversi ke satu nilai Visual Basic kecuali untuk nilai biner, varbinary, dan gambar . Nilai-nilai ini dikonversi ke array satu dimensi Byte() di Visual Basic. Array ini memiliki rentang Byte( 0 to length 1) di mana panjang adalah jumlah byte dalam nilai biner, varbinary, atau gambar SQL Server.

Ini adalah konversi dari jenis data Visual Basic ke jenis data SQL Server.

Jenis data Visual Basic Tipe data SQL Server
Panjang, Bilangan Bulat, Byte, Boolean, Objek int
Ganda, Tunggal float
Mata Uang Uang
Tanggal datetime
String dengan 4.000 karakter atau kurang varchar/nvarchar
String dengan lebih dari 4.000 karakter teks/ntext
Array satu Byte() dimensi dengan 8.000 byte atau kurang varbinary
Array satu dimensi Byte() dengan lebih dari 8.000 byte gambar