Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara Menerapkan Pemformatan Bersyarat ke Angka di SQL Server menggunakan FORMAT()

Mungkin salah satu fitur yang kurang dikenal dari FORMAT() fungsi di SQL Server adalah salah satu yang memungkinkan Anda untuk menerapkan pemformatan bersyarat ke nomor.

Ini lebih merupakan fitur .NET daripada fitur SQL Server (atau T-SQL), tetapi SQL Server/T-SQL mendukung semuanya, memungkinkan Anda memanfaatkan sepenuhnya kemampuan untuk menerapkan pemformatan bersyarat ke angka.

Semuanya bermuara pada format string yang Anda berikan ke FORMAT() fungsi.

Anda dapat meneruskan string format yang menentukan bagaimana nomor harus diformat, bergantung pada apakah itu positif, negatif, atau nol.

Untuk memperjelas, saya tidak berbicara tentang memformat angka dengan warna atau font dll. Saya hanya berbicara tentang pemformatan angka yang biasanya Anda gunakan FORMAT() fungsi untuk (seperti menambahkan pemisah ribuan, tanda persentase, titik desimal, dll).

Selain itu, pemformatan bersyarat ini cukup terbatas – hanya tiga kondisi yang dapat diuji (positif, negatif, atau nol). Namun, Anda juga dapat menerapkan pemformatan yang sama ke dua kondisi sekaligus jika diperlukan.

Bagaimanapun, inilah cara menggunakan FORMAT() berfungsi untuk menerapkan pemformatan bersyarat ke nomor di SQL Server.

Memperkenalkan ; – Pemisah Bagian

.NET mendefinisikan titik koma (; ) sebagai salah satu penentu format numerik kustomnya, yang disebut sebagai pemisah bagian .

Pemisah bagian adalah penentu format bersyarat yang mendefinisikan bagian dengan string format terpisah untuk angka positif, negatif, dan nol. Ini memungkinkan Anda untuk menerapkan pemformatan yang berbeda ke angka bergantung pada apakah nilainya positif, negatif, atau nol.

String format numerik kustom dapat berisi hingga tiga bagian yang dipisahkan oleh titik koma. Ini adalah sebagai berikut:

  • Satu bagian :Tidak ada pemformatan bersyarat yang berlaku dalam kasus ini. String format berlaku untuk semua nilai. Tidak diperlukan pemisah bagian (karena hanya ada satu bagian). Tidak diragukan lagi, ini adalah bentuk paling umum dari format string.
  • Dua bagian :Bagian pertama berlaku untuk nilai positif dan nol, dan bagian kedua berlaku untuk nilai negatif.

    Jika angka yang akan diformat negatif, tetapi menjadi nol setelah dibulatkan sesuai dengan format pada bagian kedua, maka angka nol yang dihasilkan diformat sesuai dengan bagian pertama.

  • Tiga bagian :Bagian pertama berlaku untuk nilai positif, bagian kedua berlaku untuk nilai negatif, dan bagian ketiga berlaku untuk nol.

    Bagian kedua dapat dibiarkan kosong (dengan tidak memiliki apa pun di antara titik koma), dalam hal ini bagian pertama berlaku untuk semua nilai bukan nol.

    Jika angka yang akan diformat bukan nol, tetapi menjadi nol setelah dibulatkan sesuai dengan format di bagian pertama atau kedua, hasil nol diformat sesuai dengan bagian ketiga.

Perhatikan bahwa nilai negatif selalu ditampilkan tanpa tanda minus saat pemisah bagian digunakan (walaupun ada pengecualian, seperti yang akan Anda lihat nanti). Jika Anda ingin nilai akhir yang diformat memiliki tanda minus, Anda harus secara eksplisit menyertakan tanda minus sebagai bagian dari string format kustom. Ini juga berlaku untuk pemformatan lain yang sudah ada sebelumnya yang terkait dengan angka.

Contoh 1 – Satu Bagian (tanpa format bersyarat)

Berikut adalah string format numerik khas yang terdiri dari satu bagian. Tidak ada pemisah bagian yang digunakan, dan oleh karena itu tidak ada pemformatan bersyarat yang berlaku .

Kode:

SELECT 
  FORMAT(123, '0 (Number)') Positive,
  FORMAT(-123, '0 (Number)') Negative,
  FORMAT(0, '0 (Number)') Zero;

Hasil:

+--------------+---------------+------------+
| Positive     | Negative      | Zero       |
|--------------+---------------+------------|
| 123 (Number) | -123 (Number) | 0 (Number) |
+--------------+---------------+------------+

Perhatikan bahwa tanda minus tetap utuh. Ini akan dihapus jika kami menggunakan pemisah bagian.

Contoh 2 – Dua Bagian (pemformatan bersyarat)

Di sinilah pemformatan bersyarat dimulai.

Dalam contoh ini, kami memiliki dua bagian (dipisahkan oleh satu pemisah bagian). Bagian di sebelah kiri pemisah hanya berlaku untuk nilai positif atau nol. Bagian di sebelah kanan hanya berlaku untuk nilai negatif.

Kode:

SELECT FORMAT(123,  '0 (Positive or Zero); 0 (Negative)') Result;

Hasil:

+------------------------+
| Result                 |
|------------------------|
| 123 (Positive or Zero) |
+------------------------+

Dalam hal ini angkanya positif, jadi bagian pertama digunakan untuk memformatnya.

Contoh 3 – Dua Bagian (format string yang sama, nilai yang berbeda)

Pada contoh berikutnya, format string yang sama diterapkan ke nilai yang berbeda (positif, negatif, dan nol).

Kode:

SELECT 
  FORMAT(123,  '0 (Positive or Zero); 0 (Negative)') Positive,
  FORMAT(-123, '0 (Positive or Zero); 0 (Negative)') Negative,
  FORMAT(0,    '0 (Positive or Zero); 0 (Negative)') Zero;

Hasil:

+------------------------+-----------------+----------------------+
| Positive               | Negative        | Zero                 |
|------------------------+-----------------+----------------------|
| 123 (Positive or Zero) |  123 (Negative) | 0 (Positive or Zero) |
+------------------------+-----------------+----------------------+

Jadi contoh ini menunjukkan manfaat sebenarnya dari pemisah bagian – bahwa kita bisa mendapatkan hasil yang berbeda bergantung pada nilainya.

Contoh 4 – Dua Bagian dengan Pembulatan

Saat menggunakan dua bagian, nilai negatif apa pun yang dibulatkan ke nol diformat di bawah string format pertama.

Kode:

SELECT 
  FORMAT(0.1,  '0 (Positive or Zero); 0 (Negative)') Positive,
  FORMAT(-0.1, '0 (Positive or Zero); 0 (Negative)') Negative;

Hasil:

+----------------------+----------------------+
| Positive             | Negative             |
|----------------------+----------------------|
| 0 (Positive or Zero) | 0 (Positive or Zero) |
+----------------------+----------------------+

Contoh 5 – Tiga Bagian (penggunaan dasar)

Berikut adalah contoh dasar untuk menentukan tiga bagian. Kami menggunakan dua pemisah bagian untuk mencapai ini.

Kode:

SELECT FORMAT(123, '0 (Positive); 0 (Negative); 0 (Zero)') Result;

Hasil:

+----------------+
| Result         |
|----------------|
| 123 (Positive) |
+----------------+

Dalam hal ini, angkanya adalah nilai positif, jadi diformat di bawah bagian pertama.

Contoh 6 – Tiga Bagian (format string yang sama, nilai yang berbeda)

Contoh ini menunjukkan berbagai hasil yang dapat kita peroleh dari contoh sebelumnya, bergantung pada nilai input.

Di sini, string format yang sama diterapkan ke nilai yang berbeda. Saya juga menetapkan format string ke variabel, tetapi ini hanya untuk membuatnya lebih mudah dibaca.

DECLARE @formatstring varchar(35);
SET @formatstring = '0 (Positive); 0 (Negative); 0 (Zero)';
SELECT 
  FORMAT(123,   @formatstring) 'Positive',
  FORMAT(-123,  @formatstring) 'Negative',
  FORMAT(0,     @formatstring) 'Zero',
  FORMAT(0.123, @formatstring) 'Rounded to Zero';

Hasil:

+----------------+-----------------+----------+-------------------+
| Positive       | Negative        | Zero     | Rounded to Zero   |
|----------------+-----------------+----------+-------------------|
| 123 (Positive) |  123 (Negative) |  0 (Zero |  0 (Zero          |
+----------------+-----------------+----------+-------------------+

Contoh 7 – Tiga Bagian (termasuk yang kosong)

Jika Anda membiarkan string format kedua kosong, bagian pertama berlaku untuk semua nilai bukan nol. Untuk mengosongkannya, jangan tinggalkan apa pun di antara titik koma.

Kode:

SELECT 
  FORMAT(123,   '0 (Nonzero);; 0 (Zero)') 'Positive',
  FORMAT(-123,  '0 (Nonzero);; 0 (Zero)') 'Negative',
  FORMAT(0,     '0 (Nonzero);; 0 (Zero)') 'Zero',
  FORMAT(0.123, '0 (Nonzero);; 0 (Zero)') 'Rounded to Zero';

Hasil:

+---------------+----------------+-----------+-------------------+
| Positive      | Negative       | Zero      | Rounded to Zero   |
|---------------+----------------+-----------+-------------------|
| 123 (Nonzero) | -123 (Nonzero) |  0 (Zero) |  0 (Zero)         |
+---------------+----------------+-----------+-------------------+

Menariknya, dalam hal ini tanda minus untuk nilai negatif dibiarkan utuh.

Contoh 8 – Tanda Minus

Seperti disebutkan, pemisah bagian mengabaikan pemformatan yang sudah ada sebelumnya yang terkait dengan nomor tersebut. Ini termasuk tanda minus untuk nilai negatif (walaupun contoh sebelumnya tampaknya merupakan pengecualian untuk ini).

Jika Anda ingin menyertakan tanda minus, Anda harus menambahkannya secara eksplisit ke string format Anda. Contoh di bawah.

Kode:

SELECT 
  FORMAT(-123, '0 (P); 0 (N); 0 (Z)') 'Without minus sign',
  FORMAT(-123, '0 (P); -0 (N); 0 (Z)') 'With minus sign';

Hasil:

+----------------------+-------------------+
| Without minus sign   | With minus sign   |
|----------------------+-------------------|
|  123 (N)             |  -123 (N)         |
+----------------------+-------------------+

Seperti yang ditunjukkan, contoh sebelumnya tampaknya merupakan pengecualian untuk ini, jadi sesuatu yang perlu diingat. Inilah yang terjadi jika saya menambahkan tanda minus ke string format untuk nilai negatif pada contoh sebelumnya:

SELECT FORMAT(-123,  '-0 (Nonzero);; 0 (Zero)') Result;

Hasil:

+-----------------+
| Result          |
|-----------------|
| --123 (Nonzero) |
+-----------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gunakan @@IDENTITY untuk Mengembalikan Nilai Identitas yang Disisipkan Terakhir di SQL Server

  2. Cara Menampilkan Kolasi Server di SQL Server (T-SQL)

  3. Tabel Daftar SQL Server:Cara Menampilkan Semua Tabel

  4. Contoh Kueri Server Tertaut SQL Server

  5. Bagaimana saya bisa mengubah batasan kunci utama menggunakan sintaks SQL?