Saya menjalankan beberapa pertanyaan administratif dan menyusun hasil dari sp_spaceused
di SQL Server 2008 untuk melihat rasio ruang data / indeks dari beberapa tabel dalam database saya. Tentu saja saya mendapatkan segala macam hasil dalam jumlah besar dan mata saya mulai tertutup. Akan sangat nyaman jika saya bisa memformat semua angka itu dengan koma (987654321 menjadi 987.654.321). Lucu bahwa selama bertahun-tahun saya telah menggunakan SQL Server, masalah ini tidak pernah muncul karena sebagian besar waktu saya akan melakukan format pada lapisan presentasi, tetapi dalam hal ini hasil T-SQL dalam SSMS adalah presentasi.
Saya telah mempertimbangkan hanya membuat UDR CLR sederhana untuk menyelesaikan ini, tetapi sepertinya ini harus dilakukan di T-SQL lama. Jadi, saya akan mengajukan pertanyaan di sini - bagaimana Anda melakukan pemformatan numerik dalam vanilla T-SQL?
sumber
Jawaban:
Di SQL Server 2012 dan lebih tinggi, ini akan memformat angka dengan koma:
Anda juga dapat mengubah
0
ke jumlah tempat desimal yang Anda inginkan.sumber
format
fungsi.culture
.Sementara saya setuju dengan semua orang, termasuk OP, yang mengatakan bahwa pemformatan harus dilakukan di lapisan presentasi, pemformatan ini dapat diselesaikan dalam T-SQL dengan melakukan casting ke
money
dan kemudian mengonversi kevarchar
. Ini tidak termasuk desimal jejak, yang bisa dilumpuhkan denganSUBSTRING
.sumber
Saya akan merekomendasikan Ganti sebagai pengganti Substring untuk menghindari masalah panjang string:
sumber
Untuk implementasi SQL Server 2012+, Anda akan memiliki kemampuan untuk menggunakan FORMAT untuk menerapkan pemformatan string ke tipe data non-string.
Dalam pertanyaan awal, pengguna meminta kemampuan untuk menggunakan koma sebagai ribuan pemisah. Dalam pertanyaan tertutup sebagai duplikat , pengguna telah bertanya bagaimana mereka dapat menerapkan pemformatan mata uang. Kueri berikut menunjukkan cara melakukan kedua tugas. Ini juga menunjukkan penerapan budaya untuk menjadikan ini solusi yang lebih umum (membahas fungsi Tsiridis Dimitris untuk menerapkan format khusus Yunani)
SQLFiddle untuk hal di atas
sumber
String index out of range: 33
Demo 1
Menunjukkan penambahan koma:
Demo 2
Menunjukkan koma dan titik desimal. Perhatikan bahwa ia membulatkan angka terakhir jika perlu.
Kesesuaian
SQL Server 2012+
.sumber
Silakan coba dengan kueri di bawah ini:
Format dengan titik desimal kanan:
sumber
FORMAT
fungsinya adalahSELECT format(123456789987654321,'###,##0')
, atau lebih sederhana,select format(123456789987654321, 'N0')
seperti yang dijawab oleh @ThomasMueller.output = 9.876.543
dan Anda dapat mengganti 9876543 dengan nama kolom Anda.
sumber
Mencoba trik uang di atas, dan ini berfungsi baik untuk nilai numerik dengan dua atau kurang angka signifikan. Saya membuat fungsi saya sendiri untuk memformat angka dengan desimal:
sumber
Ini termasuk dalam komentar untuk jawaban Phil Hunt tetapi sayangnya saya tidak memiliki perwakilan.
Untuk menghapus "0,00" di bagian akhir string angka Anda, nama samaran sangat berguna. Ini tokenizes string dibatasi periode dan mengembalikan elemen yang ditentukan, dimulai dengan token paling kanan sebagai elemen 1.
Menghasilkan "987.654.321"
sumber
di sini adalah UDF t-sql lain
sumber
sumber
Berikut ini adalah fungsi skalar yang saya gunakan yang memperbaiki beberapa bug pada contoh sebelumnya (di atas) dan juga menangani nilai desimal (ke # digit yang ditentukan) (DITERBITKAN juga bekerja dengan 0 & angka negatif). Satu catatan lain, pemeran sebagai metode uang di atas terbatas pada ukuran tipe data MONEY, dan tidak berfungsi dengan 4 (atau lebih) desimal digit. Metode itu jelas lebih sederhana tetapi kurang fleksibel.
sumber
UDF lain yang semoga cukup generik dan tidak membuat asumsi tentang apakah Anda ingin membulatkan ke tempat desimal tertentu:
sumber
- ================================================ =================== -
/ * Fungsi ini membutuhkan 3 argumen: argumen pertama adalah @Numero_str yang nomor sebagai input data, dan 2 argumen lainnya menentukan bagaimana informasi akan diformat untuk output, argumen tersebut adalah @Pos_Enteros dan @Pos_Decimales yang menentukan berapa banyak Bilangan bulat dan Desimal yang ingin Anda tunjukkan untuk Angka yang Anda berikan sebagai argumen masukan. * /
sumber
Untuk SQL Server sebelum 2012 yang tidak termasuk fungsi FORMAT, buat fungsi ini:
pilih dbo.FormatCurrency (12345678) mengembalikan $ 12.345.678,00
Jatuhkan $ jika Anda hanya ingin koma.
sumber