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 gaya tanggal 0. SYSDATETIME() secara implisit mengonversi ke gaya tanggal 21.

Konversi eksplisit menggunakan fungsi CAST 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.

Data type conversion table

Meskipun bagan di atas 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 int nilai jenis ke variabel, lalu memilih perangkaian variabel dengan string.

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

Nilai int dikonversi 1 menjadi varchar, sehingga SELECT pernyataan mengembalikan nilai 1 is a string..

Contoh berikut, menunjukkan skrip serupa dengan int variabel 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. Perhatikan bahwa + operator menjadi penambahan daripada penggalian 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.

Topik berikut menjelaskan perilaku konversi yang dipamerkan oleh jenis data yang sesuai:

Mengonversi Tipe Data dengan Menggunakan Prosedur Tersimpan Otomatisasi OLE

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 Byte() satu 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 dengan pengecualian nilai biner, varbinary, dan gambar . Nilai-nilai ini dikonversi ke array Byte() satu dimensi di Visual Basic. Array ini memiliki rentang Byte( 0 hingga panjang 1 **)** di mana panjangnya 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 4000 karakter atau kurang varchar/nvarchar
String dengan lebih dari 4000 karakter teks/ntext
Array Byte() satu dimensi dengan 8000 byte atau kurang varbinary
Array Byte() satu dimensi dengan lebih dari 8000 byte gambar

Baca juga

Prosedur Tersimpan Automasi OLE (Transact-SQL)
CAST dan CONVERT (Transact-SQL)
Tipe Data (Transact-SQL)
COLLATE (Transact-SQL)