Jika Anda pernah menggunakan TO_CHAR()
fungsi untuk memformat tanggal yang menggunakan nama bulan, Anda mungkin telah memperhatikan bahwa terkadang bulan dikembalikan dengan padding yang tepat.
Ini terjadi secara default ketika nama bulan lebih pendek dari nama bulan terpanjang, berdasarkan bahasa dan kalender yang digunakan.
Misalnya, jika bahasa Anda bahasa Inggris dan kalender Gregorian, nama bulan terpanjang adalah September, yaitu sembilan karakter. Jika Anda menampilkan bulan dari tanggal, dan dikatakan, Maret (panjang lima karakter), maka secara default, Maret akan memiliki empat spasi tambahan (5 + 4 =9).
Untungnya, mudah untuk menghapus bantalan yang tepat ini jika diperlukan. Untuk menghapus padding yang tepat, gunakan fm
pengubah format.
Masalahnya
Pertama, inilah masalah yang kami coba selesaikan:
SELECT
TO_CHAR(date '2030-03-08', 'DD-MONTH-YYYY')
FROM DUAL;
Hasil:
08-MARCH -2030
Kita dapat melihat bahwa ada jarak yang besar antara nama bulan dan tahun. Jika kita tidak menginginkan celah ini, kita dapat menggunakan fm
pengubah, seperti yang ditunjukkan di bawah ini.
Solusinya
Sekarang inilah solusinya:
SELECT
TO_CHAR(date '2030-03-08', 'fmDD-MONTH-YYYY')
FROM DUAL;
Hasil:
8-MARCH-2030
Sekarang tidak ada jarak antara bulan dan tahun.
Yang saya lakukan hanyalah menambahkan model format dengan fm
.
fm
pengubah format adalah singkatan dari "Fill Mode". Secara default Oracle menggunakan karakter kosong yang tertinggal dan nol di depan untuk mengisi elemen format dengan lebar konstan. Lebar sama dengan lebar tampilan elemen terbesar untuk model format yang relevan. Menggunakan fm
pengubah menekan semua padding tersebut.
Anda mungkin memperhatikan bahwa fm
modifier juga menekan angka nol di depan pada nomor hari. Jika kita tidak menginginkan ini, kita dapat menempatkan fm
pengubah di depan MONTH
format elemen sebagai gantinya.
Seperti ini:
SELECT
TO_CHAR(date '2030-03-08', 'DD-fmMONTH-YYYY')
FROM DUAL;
Hasil:
08-MARCH-2030
Kali ini, fm
tidak diterapkan pada hari itu, tetapi sudah diterapkan pada bulan dan tahun.
Jika kita tidak ingin menekan angka nol di depan dari tahun, maka kita perlu menambahkan fm
lain sebelum tahun.
Berikut adalah contoh yang menggambarkan apa yang saya maksud:
SELECT
TO_CHAR(date '0030-03-08', 'DD-fmMONTH-YYYY') AS "r1",
TO_CHAR(date '0030-03-08', 'DD-fmMONTH-fmYYYY') AS "r2"
FROM DUAL;
Hasil:
r1 r2 ______________ ________________ 08-MARCH-30 08-MARCH-0030
Kolom pertama hanya menggunakan satu fm
(di depan MONTH
).
Kolom kedua menggunakan dua fm
pengubah (satu di depan MONTH
, dan satu di depan YYYY
).