Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Cara Menghapus Spasi Trailing setelah Nama Bulan di Oracle

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 ).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GROUP BY dengan MAX(DATE)

  2. Fungsi baris tunggal di Oracle sql

  3. Gabungkan node XMLType dalam kueri Oracle

  4. Hibernasi kueri asli - kolom char(3)

  5. Tabel Sementara Lokal di Oracle 10 (untuk ruang lingkup Prosedur Tersimpan)