Zoals de titel zegt, wil ik een manier vinden om via een query te controleren welke van mijn datasets voorbij de 6 maanden zijn vanaf SYSDATE.
SELECT * FROM OrderArchive
WHERE OrderDate <= '31 Dec 2014';
Ik'heb het volgende geprobeerd maar het geeft een foutmelding dat mijn datum formaat verkeerd is. Echter, bij het invoegen van de gegevens gebruikte ik dat datumformaat zoals gevraagd/bedoeld en had geen problemen.
Fout bij opdrachtregel : 10 Kolom : 25
Blokquote
Fout rapport -
SQL Fout: ORA-01861: literal komt niet overeen met format string 01861. 00000 - "literal komt niet overeen met format string"
*Oorzaak: De lettertekens in de input moeten even lang zijn als de lettertekens in de format string (met uitzondering van voorloopwitruimte). Als de "FX" modifier is aangezet, moet de lettertekst exact overeenkomen, zonder extra spaties.
*Actie: Corrigeer de format string zodat deze overeenkomt met de letterlijke tekst.
Aangezien je querystring een letterwoord is, en ervan uitgaande dat je datums correct zijn opgeslagen als DATE
, moet je date literals gebruiken:
SELECT * FROM OrderArchive
WHERE OrderDate <= DATE '2015-12-31'
Als u TO_DATE
wilt gebruiken (omdat bijvoorbeeld uw querywaarde geen letterlijke waarde is), stel ik voor dat u expliciet de parameter NLS_DATE_LANGUAGE instelt, omdat u Amerikaanse afgekorte maandnamen gebruikt. Op die manier zal het niet kapot gaan op sommige gelokaliseerde Oracle installaties:
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31 Dec 2014', 'DD MON YYYY',
'NLS_DATE_LANGUAGE = American');
Je moet de string omzetten naar datum met de to_date()
functie
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31-Dec-2014','DD-MON-YYYY');
OF
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31 Dec 2014','DD MON YYYY');
OR
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('2014-12-31','yyyy-MM-dd');
Dit werkt alleen als OrderDate
is opgeslagen in Datum formaat
. Als het Varchar
is, moet je de to_date()
func ook op die kolom toepassen, zoals
SELECT * FROM OrderArchive
WHERE to_date(OrderDate,'yyyy-Mm-dd') <= to_date('2014-12-31','yyyy-MM-dd');