Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Aturan di bagian ini berlaku untuk konversi yang melibatkan literal numerik. Untuk tujuan aturan ini, istilah-istilah berikut didefinisikan:
Menyimpan penetapan: Saat mengirim data ke dalam kolom tabel dalam database. Ini terjadi selama panggilan ke SQLExecute, SQLExecDirect, dan SQLSetPos. Selama penetapan penyimpanan, "target" mengacu pada kolom database dan "sumber" mengacu pada data dalam buffer aplikasi.
Penugasan pengambilan: Saat mengambil data dari database ke buffer aplikasi. Ini terjadi selama panggilan ke SQLFetch, SQLGetData, SQLFetchScroll, dan SQLSetPos. Selama penetapan pengambilan, "target" mengacu pada buffer aplikasi dan "sumber" mengacu pada kolom database.
CS: Nilai dalam sumber karakter.
NT: Nilai dalam target numerik.
NS: Nilai dalam sumber numerik.
CT: Nilai dalam target karakter.
Presisi literal numerik yang tepat: jumlah digit yang dikandungnya.
Skala literal numerik yang tepat: jumlah digit di sebelah kanan periode yang dinyatakan atau tersirat.
Presisi literal perkiraan numerik: presisi mantissanya.
Sumber Karakter ke Target Numerik
Berikut adalah aturan untuk mengonversi dari sumber karakter (CS) ke target numerik (NT):
Ganti CS dengan nilai yang diperoleh dengan menghapus spasi di awal atau akhir di CS. Jika CS bukan numerik-literal yang valid, SQLSTATE 22018 (Nilai karakter tidak valid untuk spesifikasi cast) dikembalikan.
Ganti CS dengan nilai yang diperoleh dengan menghapus nol di depan sebelum titik desimal, nol berikutnya setelah titik desimal, atau keduanya.
Mengonversi CS ke NT. Jika konversi mengakibatkan hilangnya digit signifikan, SQLSTATE 22003 (Nilai numerik di luar rentang) dikembalikan. Jika konversi mengakibatkan hilangnya digit yang tidak signifikan, SQLSTATE 01S07 (Pemotongan pecahan) dikembalikan.
Sumber Numerik ke Target Karakter
Berikut adalah aturan untuk mengonversi dari sumber numerik (NS) ke target karakter (CT):
Biarkan LT menjadi panjang karakter CT. Untuk penetapan pengambilan, LT sama dengan panjang buffer dalam karakter dikurangi jumlah byte dalam karakter penghentian null untuk set karakter ini.
Kasus:
Jika NS adalah jenis numerik yang tepat, maka biarkan YP sama dengan string karakter terpendek yang sesuai dengan definisi persis-numerik-literal sehingga skala YP sama dengan skala NS, dan nilai YP yang ditafsirkan adalah nilai absolut NS.
Jika NS adalah perkiraan jenis numerik, maka biarkan YP menjadi string karakter sebagai berikut:
Kasus:
Jika NS sama dengan 0, maka YP adalah 0.
Biarkan YSN menjadi string karakter terpendek yang sesuai dengan definisi persis-numerik-literal dan yang nilai yang ditafsirkan adalah nilai absolut NS. Jika panjang YSN kurang dari (presisi + 1) dari jenis data NS, maka biarkan YP sama dengan YSN.
Jika tidak, YP adalah string karakter terpendek yang sesuai dengan definisi perkiraan-numerik-literal yang nilai yang ditafsirkan adalah nilai absolut NS dan yang mantissanya terdiri dari satu digit yang bukan '0', diikuti oleh titik dan bilangan bulat yang tidak ditandatangani.
Kasus:
Jika NS kurang dari 0, maka biarkan Y menjadi hasil dari:
'-' || YP
di mana '||' adalah operator perangkaian string.
Jika tidak, biarkan Y sama dengan YP.
Biarkan LY menjadi panjang karakter Y.
Kasus:
Jika LY sama dengan LT, maka CT diatur ke Y.
Jika LY kurang dari LT, maka CT diatur ke Y diperluas di sebelah kanan dengan jumlah spasi yang sesuai.
Jika tidak (LY > LT), salin karakter LT pertama Y ke dalam CT.
Kasus:
Jika ini adalah penetapan penyimpanan, kembalikan kesalahan SQLSTATE 22001 (Data string, terpotong kanan).
Jika ini adalah penetapan pengambilan, kembalikan peringatan SQLSTATE 01004 (Data string, terpotong kanan). Ketika salinan menghasilkan hilangnya digit pecahan (selain nol berikutnya), salinan ditentukan driver apakah salah satu hal berikut terjadi:
(1) Driver memotong string dalam Y ke skala yang sesuai (yang bisa nol juga) dan menulis hasilnya menjadi CT.
(2) Driver membulatkan string dalam Y ke skala yang sesuai (yang juga dapat nol) dan menulis hasilnya ke dalam CT.
(3) Driver tidak memotong atau membulatkan, tetapi hanya menyalin karakter LT pertama Y ke dalam CT.