sql >> Database >  >> RDS >> Oracle

Hoe voorloopnullen van datums in Oracle te verwijderen

In Oracle Database kunt u de fm (vulmodus) formaatmodificator om voorloopnullen te onderdrukken die op een datum kunnen worden toegepast. Deze opmaakmodifier onderdrukt opvulling, inclusief voorloopnullen en volgspaties.

Om de fm te gebruiken formaatmodifier, neem het dan op in uw formaatmodel wanneer u specificeert hoe datums moeten worden opgemaakt. Bijvoorbeeld bij gebruik van de TO_CHAR() functie om datums op te maken, of in NLS-parameters zoals de NLS_DATE_FORMAT parameter bij het instellen van de datumnotatie voor uw huidige sessie.

Voorbeeld

Hier is een voorbeeld om te demonstreren:

SELECT 
    TO_CHAR(DATE '2009-08-01', 'DD-MM-YY') AS "Without fm",
    TO_CHAR(DATE '2009-08-01', 'fmDD-MM-YY') AS "With fm"
FROM DUAL;

Resultaat:

   Without fm    With fm 
_____________ __________ 
01-08-09      1-8-9     

We kunnen zien dat het oorspronkelijke resultaat (zonder de fm modifier) ​​retourneert voorloopnullen voor alle datumdelen. In dit geval is de fm modifier onderdrukte de voorloopnul op alle drie de datumdelen.

De fm modifier heeft alleen invloed op het resultaat als er daadwerkelijk voorloopnullen in het resultaat staan.

Hier is een datum die datumdelen bevat die uit twee cijfers bestaan ​​en daarom geen voorloopnullen hebben:

SELECT 
    TO_CHAR(DATE '2029-12-01', 'DD-MM-YY') AS "Without fm",
    TO_CHAR(DATE '2029-12-01', 'fmDD-MM-YY') AS "With fm"
FROM DUAL;

Resultaat:

   Without fm    With fm 
_____________ __________ 
01-12-29      1-12-29    

Hoe de vulmodus alleen op sommige datumdelen te specificeren

Het bovenstaande voorbeeld onderdrukte de voorloopnul op alle datumdelen. De voorloopnul is verwijderd van de dag, de maand en het jaar. Dit komt omdat, wanneer we een enkele fm . plaatsen aan het begin van het formaatmodel onderdrukt het alles volgende voorloopnullen in het resultaat.

Stel dat we alleen de voorloopnul van de dag en de maand willen verwijderen, maar deze op het jaar willen behouden. In dit geval kunnen we het volgende doen:

SELECT TO_CHAR(DATE '2009-08-01', 'fmDD-MM-fmYY')
FROM DUAL;

Resultaat:

1-8-09

De fm modifier werkt in principe als een schakelaar. Als je er een opneemt, onderdrukt het nullen tot het einde, of totdat het een andere fm tegenkomt modificator. Als er een tweede fm . is modifier, dan worden voorloopnullen voorbij dat punt niet onderdrukt, enzovoort.

Dit is wat er gebeurt als we drie fm . opnemen modifiers – één voor elk datumgedeelte:

SELECT TO_CHAR(DATE '2009-08-01', 'fmDD-fmMM-fmYY')
FROM DUAL;

Resultaat:

1-08-9

Dus in dit geval de fm modifier was in principe ingeschakeld, vervolgens uitgeschakeld en vervolgens weer ingeschakeld.

NLS-parameters

U kunt ook de vulmodus specificeren in uw NLS-parameters, zoals de NLS_DATE_FORMAT parameter bij het instellen van de datumnotatie voor uw huidige sessie.

Voorbeeld:

ALTER SESSION SET NLS_DATE_FORMAT = 'fmDD-MM-fmRR';

SELECT DATE '2009-08-07' FROM DUAL;

Resultaat:

7-8-09

  1. Ik kan niet meerdere afbeeldingen instellen in rasterweergave?

  2. Orde handhaven in MySQL IN-query

  3. Tijdgedeelte van een DateTime-veld in SQL

  4. Wat betekent het om aan een string te ontsnappen?