sql >> Database >  >> RDS >> Oracle

Hoe de volgspaties na de maandnaam in Oracle te verwijderen

Als je ooit de TO_CHAR() . hebt gebruikt functie om een ​​datum op te maken die de naam van de maand gebruikt, is het je misschien opgevallen dat de maand soms wordt geretourneerd met de juiste opvulling.

Dit gebeurt standaard wanneer de naam van de maand korter is dan de langste naam van de maand, gebaseerd op de taal en de kalender die wordt gebruikt.

Als uw taal bijvoorbeeld Engels is en de kalender Gregoriaans, is de naam van de langste maand september, die negen tekens lang is. Als u de maand van een datum retourneert, en het is bijvoorbeeld maart (vijf tekens lang), dan heeft maart standaard vier volgspaties (5 + 4 =9).

Gelukkig is het eenvoudig om deze juiste vulling indien nodig te verwijderen. Gebruik de fm . om de juiste opvulling te verwijderen formaatmodificator.

Het probleem

Ten eerste, hier is het probleem dat we proberen op te lossen:

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

Resultaat:

08-MARCH    -2030

We kunnen zien dat er een grote kloof is tussen de naam van de maand en het jaar. Als we deze kloof niet willen, kunnen we de fm . gebruiken modifier, zoals hieronder weergegeven.

De oplossing

Dit is de oplossing:

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

Resultaat:

8-MARCH-2030

Nu is er geen gat meer tussen de maand en het jaar.

Het enige wat ik deed was het formaatmodel toevoegen met fm .

De fm format modifier staat voor "Fill Mode". Oracle gebruikt standaard blanco tekens en voorloopnullen om formaatelementen tot een constante breedte te vullen. De breedte is gelijk aan de weergavebreedte van het grootste element voor het betreffende formaatmodel. De fm gebruiken modifier onderdrukt al deze opvulling.

Het is je misschien opgevallen dat de fm modifier onderdrukte ook de voorloopnul op het dagnummer. Als we dit niet willen, kunnen we de fm modifier voor de MONTH formaatelement in plaats daarvan.

Zoals dit:

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

Resultaat:

08-MARCH-2030

Deze keer is de fm werd niet toegepast op de dag, maar het was was toegepast op de maand en het jaar.

Als we voorloopnullen van het jaar niet willen onderdrukken, dan moeten we nog een fm toevoegen voor het jaar.

Hier is een voorbeeld dat illustreert wat ik bedoel:

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;

Resultaat:

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

De eerste kolom gebruikt slechts één fm (voor MONTH ).

De tweede kolom gebruikt twee fm modifiers (één voor MONTH , en één voor YYYY ).


  1. Veelvoorkomende fouten met SQL Server

  2. Vergelijk data in MySQL

  3. LOCALTIME-voorbeelden - MySQL

  4. Een database dupliceren met phpMyAdmin