Di SQL Server, FORMAT()
fungsi memungkinkan Anda untuk memformat nilai tanggal/waktu dan angka sebagai string yang diformat dengan meneruskan "format string" sebagai argumen kedua (argumen pertama adalah nilai yang sedang diformat).
Berikut adalah contoh dari fungsi ini dalam tindakan:
FORMAT(@date, 'dd/MM/yyyy');
Dalam hal ini format stringnya adalah dd/MM/yyyy .
String format khusus ini menetapkan bahwa @date
nilai harus diformat dengan hari dua digit, bulan dua digit, dan tahun empat digit, dalam urutan itu, dan dengan garis miring sebagai pemisah.
Ini akan menghasilkan sesuatu seperti ini:
21/05/2019
Sebuah format string adalah string yang berisi satu atau lebih penentu format , yang merupakan karakter tunggal atau grup karakter yang menentukan bagaimana output harus diformat.
SQL Server hanya menerima format string yang didukung oleh .NET Framework.
String format dapat berupa string format standar atau string format kustom. Begini cara kerjanya:
- Sebuah string format standar adalah string format yang telah ditentukan. Ini berisi penentu format tunggal yang ditafsirkan sebagai mewakili format tertentu yang telah ditentukan sebelumnya. String format standar sebenarnya adalah alias untuk string format kustom. Namun, string format khusus yang sebenarnya digunakan sering kali bergantung pada budaya.
- Sebuah string format khusus di sisi lain, terdiri dari satu atau lebih penentu format khusus yang, dalam kombinasi satu sama lain, akan menentukan format. Ini memungkinkan Anda lebih banyak fleksibilitas dengan menentukan bagaimana output akan terlihat.
Contoh 1 – String Format Standar
Berikut ini contoh untuk mendemonstrasikan cara kerja string format standar.
SELECT FORMAT(1234, 'C') AS Result;
Hasil:
+-----------+ | Result | |-----------| | $1,234.00 | +-----------+
Dalam contoh ini, C
adalah format string. Dalam hal ini, ini adalah string format numerik standar yang terdiri dari penentu format tunggal. Penentu format khusus ini digunakan untuk mewakili jumlah mata uang.
Kami juga bisa mendapatkan hasil yang sama dengan menggunakan string format numerik khusus.
Contoh 2 – String Format Kustom
Contoh ini menghasilkan output yang sama seperti contoh sebelumnya. Perbedaannya adalah, dalam contoh ini, saya menggunakan custom format string, bukan string standar.
SELECT FORMAT(1234, '$#,###.00') AS Result;
Hasil:
+-----------+ | Result | |-----------| | $1,234.00 | +-----------+
string format khusus memungkinkan Anda untuk membuat format kustom Anda sendiri. Anda dapat menggabungkan string dengan penentu format untuk membuat format kustom Anda sendiri.
Dalam contoh ini, saya menggunakan #
format specifier, yang merupakan pengganti angka. Jika tidak ada digit, tidak ada digit yang muncul di string yang dihasilkan.
Saya juga menggunakan 0
penentu format, yang juga merupakan pengganti untuk digit apa pun. Namun dalam kasus ini, jika angka tidak ada, angka nol digunakan sebagai gantinya.
Saya juga menyertakan $
, ,
, dan .
string literal dalam format string. Ini disertakan dalam output persis seperti apa adanya.
Jika kita mengurangi jumlah input, kita dapat melihat bagaimana hasilnya berbeda antara 0
dan #
penentu format, dan bagaimana perbandingannya dengan C
penentu format standar dari contoh sebelumnya:
SELECT FORMAT(34, 'C') AS 'C', FORMAT(34, '$0,000.00') AS '0', FORMAT(34, '$#,###.00') AS '#';
Hasil:
+--------+-----------+--------+ | C | 0 | # | |--------+-----------+--------| | $34.00 | $0,034.00 | $34.00 | +--------+-----------+--------+
Seperti yang Anda bayangkan, string format kustom memberikan lebih banyak fleksibilitas dibandingkan string format standar.
Namun, ada banyak skenario di mana string format standar bisa lebih kuat, terutama dalam hal menghasilkan hasil dinamis yang memperhitungkan budaya. Lebih lanjut tentang budaya segera.
Contoh 3 – Memformat Tanggal dan Waktu
Nilai tanggal/waktu juga menawarkan pilihan string format standar atau kustom. Berikut adalah contoh nilai tanggal/waktu yang diformat dengan string format standar, serta beberapa string format khusus.
DECLARE @date datetime2(7); SET @date = '2080-05-01 23:09:08.1234567'; SELECT FORMAT(@date, 'd') AS 'd', FORMAT(@date, 'M/d/yyyy') AS 'M/d/yyyy', FORMAT(@date, 'dd/MM/yy') AS 'dd/MM/yy', FORMAT(@date, 'ddd, MMM dd, yy') AS 'ddd, MMM dd, yy', FORMAT(@date, 'dddd, dd MMMM yyyy') AS 'dddd, dd MMMM yyyy';
Hasil:
+----------+------------+------------+-------------------+------------------------+ | d | M/d/yyyy | dd/MM/yy | ddd, MMM dd, yy | dddd, dd MMMM yyyy | |----------+------------+------------+-------------------+------------------------| | 5/1/2080 | 5/1/2080 | 01/05/80 | Wed, May 01, 80 | Wednesday, 01 May 2080 | +----------+------------+------------+-------------------+------------------------+
Yang pertama menggunakan string format standar, dan empat lainnya menggunakan string format khusus.
Untuk daftar lengkap string format tanggal dan waktu yang tersedia, lihat berikut ini:
- Daftar String Format Tanggal/Waktu Standar
- Daftar String Format Tanggal/Waktu Kustom
Contoh 4 – Budaya
Hasil format string terkadang bergantung pada budaya yang digunakan. Misalnya, di AS format tanggal pendek direpresentasikan sebagai 'M/d/yyyy', tetapi di Inggris direpresentasikan sebagai 'dd/MM/yyyy'.
Secara default, bahasa sesi saat ini digunakan untuk mendefinisikan budaya. Namun, FORMAT()
fungsi memungkinkan Anda untuk menimpa ini.
Sintaks fungsinya seperti ini:
FORMAT ( value, format [, culture ] )
Jadi ini memungkinkan Anda untuk menentukan budaya sebagai argumen opsional.
Berikut adalah contoh di mana budaya yang berbeda dapat menghasilkan string format tunggal yang menghasilkan sejumlah format berbeda.
DECLARE @date datetime2(7); SET @date = '2080-05-01 23:09:08.1234567'; SELECT FORMAT(@date, 'd', 'en-us') AS 'US English', FORMAT(@date, 'd', 'en-gb') AS 'British', FORMAT(@date, 'd', 'de-de') AS 'German', FORMAT(@date, 'd', 'jp-jp') AS 'Japanese';
Hasil:
+--------------+------------+------------+------------+ | US English | British | German | Japanese | |--------------+------------+------------+------------| | 5/1/2080 | 01/05/2080 | 01.05.2080 | 05/01/2080 | +--------------+------------+------------+------------+
Dalam hal ini, keempat negara menggunakan d
string format tanggal dan waktu standar. Namun, mereka semua menggunakan argumen budaya yang berbeda. Ini menghasilkan hasil yang berbeda sesuai dengan budaya masing-masing.
Dan itu bukan hanya standar format string yang dipengaruhi oleh budaya. Budaya juga dapat mempengaruhi hasil adat memformat string. Ini contohnya:
DECLARE @date datetime2(7); SET @date = '2080-05-01 23:09:08.1234567'; SELECT FORMAT(@date, 'dddd, dd MMMM', 'en-us') AS 'US English', FORMAT(@date, 'dddd, dd MMMM', 'de-de') AS 'German', FORMAT(@date, 'dddd, dd MMMM', 'vi') AS 'Vietnamese', FORMAT(@date, 'dddd, dd MMMM', 'sv') AS 'Swedish';
Hasil:
+-------------------+------------------+----------------------+----------------+ | US English | German | Vietnamese | Swedish | |-------------------+------------------+----------------------+----------------| | Wednesday, 01 May | Mittwoch, 01 Mai | Thứ Tư, 01 Tháng Năm | onsdag, 01 maj | +-------------------+------------------+----------------------+----------------+
Anda juga memiliki opsi untuk menggunakan budaya invarian (iv
). Budaya invarian tidak peka budaya. Ini terkait dengan bahasa Inggris tetapi tidak dengan negara/wilayah mana pun. Untuk info dan contoh selengkapnya, lihat Cara Menentukan Budaya Invarian saat menggunakan FORMAT() di SQL Server.