Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak usunąć końcowe spacje po nazwie miesiąca w Oracle?

Jeśli kiedykolwiek używałeś TO_CHAR() Aby sformatować datę używającą nazwy miesiąca, mogłeś zauważyć, że czasami miesiąc jest zwracany z odpowiednim wypełnieniem.

Dzieje się tak domyślnie, gdy nazwa miesiąca jest krótsza niż najdłuższa nazwa miesiąca, na podstawie używanego języka i kalendarza.

Na przykład, jeśli Twoim językiem jest angielski, a kalendarz to gregoriański, najdłuższą nazwą miesiąca jest wrzesień, który ma dziewięć znaków. Jeśli zwrócisz miesiąc od daty, czyli marzec (długość pięciu znaków), to domyślnie marzec będzie miał cztery końcowe spacje (5 + 4 =9).

Na szczęście w razie potrzeby można łatwo usunąć tę właściwą wyściółkę. Aby usunąć właściwe wypełnienie, użyj fm modyfikator formatu.

Problem

Po pierwsze, oto problem, który próbujemy rozwiązać:

SELECT 
    TO_CHAR(date '2030-03-08', 'DD-MONTH-YYYY')
FROM DUAL;

Wynik:

08-MARCH    -2030

Widzimy, że istnieje duża luka między nazwą miesiąca a rokiem. Jeśli nie chcemy tej luki, możemy użyć fm modyfikator, jak pokazano poniżej.

Rozwiązanie

Oto rozwiązanie:

SELECT 
    TO_CHAR(date '2030-03-08', 'fmDD-MONTH-YYYY')
FROM DUAL;

Wynik:

8-MARCH-2030

Teraz nie ma przerwy między miesiącem a rokiem.

Wszystko, co zrobiłem, to poprzedzenie modelu formatu przedrostkiem fm .

fm modyfikator formatu oznacza „Tryb wypełniania”. Domyślnie Oracle używa końcowych pustych znaków i wiodących zer do wypełnienia elementów formatu do stałej szerokości. Szerokość jest równa szerokości wyświetlania największego elementu dla odpowiedniego modelu formatu. Korzystanie z fm modyfikator tłumi takie dopełnienie.

Być może zauważyłeś, że fm modyfikator również tłumił wiodące zero w numerze dnia. Jeśli tego nie chcemy, możemy umieścić fm modyfikator przed MONTH zamiast tego element formatu.

Tak:

SELECT 
    TO_CHAR(date '2030-03-08', 'DD-fmMONTH-YYYY')
FROM DUAL;

Wynik:

08-MARCH-2030

Tym razem fm nie został zastosowany do dnia, ale był stosowane do miesiąca i roku.

Jeśli nie chcemy pomijać wiodących zer z roku, musimy dodać kolejny fm przed rokiem.

Oto przykład, który ilustruje, o co mi chodzi:

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;

Wynik:

            r1               r2 
______________ ________________ 
08-MARCH-30    08-MARCH-0030   

Pierwsza kolumna używa tylko jednego fm (przed MONTH ).

Druga kolumna używa dwóch fm modyfikatory (jeden przed MONTH , a jeden przed 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. Wdrażanie blokowania optymistycznego w Oracle

  2. Jak usunąć końcowe spacje po nazwie miesiąca w Oracle?

  3. Znajdź zduplikowane wpisy w kolumnie

  4. Zainstaluj klienta Oracle z wiersza poleceń bez interakcji z użytkownikiem

  5. Magazynowanie danych Profilowanie danych ETL za pomocą Oracle Warehouse Builder