Konversi jenis data (Mesin Database)

Berlaku untuk: SQL Server (semua versi yang didukung) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

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 karakter :'157.27'

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 SQL Server jenis data yang disediakan sistem. 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 konversi jenis data

Meskipun bagan di atas menggambarkan semua konversi eksplisit dan implisit yang diizinkan dalam 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, memperlihatkan 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 tambahan 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 dari 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 Otomatisasi OLE menggunakan jenis data Visual Basic, prosedur tersimpan OLE Automation harus mengonversi data yang melewati di antaranya.

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

Tipe data SQL Server Jenis data Visual Basic
char, varchar, text, nvarchar, ntext String
desimal, numerik String
bit Boolean
biner, varbinary, gambar Array Byte() satu dimensi
int Panjang
smallint Bilangan bulat
kecil Byte
Float Double
Nyata Tunggal
uang, uang kecil Mata Uang
tanggalwaktu, 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

Lihat juga

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