Saya memiliki kolom apung dengan jumlah panjang yang berbeda dan saya mencoba mengubahnya menjadi varchar.
Beberapa nilai melebihi ukuran maksimal bigint, jadi saya tidak bisa melakukan hal seperti ini
cast(cast(float_field as bigint) as varchar(100))
Saya sudah mencoba menggunakan desimal, tetapi jumlahnya tidak dengan ukuran yang sama, jadi ini tidak membantu juga
CONVERT(varchar(100), Cast(float_field as decimal(38, 0)))
Bantuan apa pun dihargai.
MEMPERBARUI:
Nilai sampel adalah 2.2000012095022E + 26 .
sql-server-2008
hgulyan
sumber
sumber
cast(float_field as varchar(max))
kalau tidak, saya tidak mendapatkan pertanyaanJawaban:
Coba gunakan
STR()
fungsinya.STR () Berfungsi
Catatan lain: bantalan ini di sebelah kiri dengan spasi. Jika ini merupakan masalah, kombinasikan dengan
LTRIM
:sumber
Select LTRIM(Str(float_field, 38, 0))
berfungsi untuk data Anda?Str
fungsi. Jumlah digit setelah titik desimal. Apakah Anda membaca tautan yang saya poskan? Ubah nol menjadi 10.Select LTRIM(Str(float_field, 38, 10))
Satu-satunya bit permintaan yang saya temukan yang mengembalikan nomor asli yang sama persis adalah
Lihat http://www.connectsql.com/2011/04/normal-0-microsoftinternetexplorer4.html
Solusi lain di atas terkadang akan membulatkan atau menambah angka di bagian akhir
UPDATE : Sesuai komentar di bawah ini dan apa yang dapat saya lihat di https://msdn.microsoft.com/en-us/library/ms187928.aspx :
Harus digunakan dalam versi SQL Server baru (Azure SQL Database, dan mulai di SQL Server 2016 RC3)
sumber
0
nilai float dikonversi sebagai0.0E0
. Saya perlu mengubah bidang float menjadivarchar
seperti yang saya butuhkan untuk menampilkanNA
kapanNULL
dan0
apa adanya. Saya mencapai ini dengan menambahkanCASE
pernyataan dalam kueri seperti di bawah ini;CASE WHEN float_field IS NULL THEN 'NA' WHEN float_field = 0 THEN '0' ELSE CONVERT(VARCHAR, float_field, 128) END AS float_As_VChar
ini adalah solusi yang saya akhirnya gunakan di sqlserver 2012 (karena semua saran lain memiliki kelemahan memotong sebagian kecil atau beberapa kelemahan lainnya).
keluaran:
ini memiliki keuntungan lebih lanjut (dalam kasus saya) untuk membuat ribuan pemisah dan lokalisasi mudah:
keluaran:
sumber
Topik yang berguna terima kasih.
Jika Anda ingin saya menghapus leadings zero, Anda dapat menggunakannya:
sumber
float hanya memiliki maks. presisi 15 digit. Karena itu angka setelah posisi ke-15 acak, dan konversi ke bigint (maks. 19 angka) atau desimal tidak membantu Anda.
sumber
Ini bisa membantu tanpa pembulatan
sumber
Konversikan menjadi yang
integer
pertama dan kemudian menjadistring
:sumber
Coba ini, harus bekerja:
sumber
Jika Anda menggunakan fungsi CLR, Anda dapat mengubah float menjadi string yang terlihat seperti float, tanpa semua 0 ekstra di akhir.
Fungsi CLR
.
Contoh
.
Keluaran
.
Peringatan
Semua string yang dikonversi dipotong pada 18 tempat desimal, dan tidak ada nol tambahan. Presisi 18 digit bukanlah masalah bagi kami. Dan, 100% dari nomor FP kami (mendekati 100.000 nilai) terlihat sama dengan nilai string seperti yang mereka lakukan dalam basis data sebagai angka FP.
sumber
Respons Axel yang dimodifikasi sedikit untuk kasus-kasus tertentu akan menghasilkan hasil yang tidak diinginkan.
sumber
dari dokumentasi REPLACE () :
tes:
null ==> [NULL]
1.11 ==> 1.11
1.10 ==> 1.1
1.00 ==> 1
0.00 ==> 0
-1.10 ==> -1.1 0.00001
==> 1e-005
0.000011 ==> 1.1e- 005
sumber
Pilih
cast (ganti (convert (desimal (15,2), acs_daily_debit), '.', ',') Sebagai varchar (20))
dari acs_balance_details
sumber
Berdasarkan jawaban molekuler:
sumber
Saya baru saja menemukan situasi yang sama dan terkejut dengan masalah pembulatan 'angka sangat besar' yang disajikan dalam SSMS v17.9.1 / SQL 2017.
Saya tidak menyarankan saya punya solusi, namun saya telah mengamati bahwa FORMAT menyajikan angka yang tampaknya benar. Saya tidak bisa menyiratkan ini mengurangi masalah pembulatan lebih lanjut atau berguna dalam fungsi matematika yang rumit.
Kode SQL T disediakan yang seharusnya menunjukkan dengan jelas pengamatan saya sementara memungkinkan orang lain untuk menguji kode mereka dan ide-ide harus muncul.
sumber
adalah cara terbaik sehingga Anda tidak menambahkan
.0000
dan angka apa pun di akhir nilai.sumber