web-dev-qa-db-fra.com

Oracle SQL - instruction DATE supérieure à

Comme le titre l'indique, je souhaite trouver un moyen de vérifier les ensembles de données de SYSDATE au cours des six derniers mois via une requête.

SELECT * FROM OrderArchive
WHERE OrderDate <= '31 Dec 2014';

J'ai essayé ce qui suit mais il renvoie une erreur disant que mon format de date est incorrect. Cependant, en insérant les données, j'ai utilisé ce format de date tel que demandé/prévu et je n'ai rencontré aucun problème.

Erreur en ligne de commande: 10 Colonne: 25

Blockquote

Rapport d'erreur -

Erreur SQL: ORA-01861: le littéral ne correspond pas à la chaîne de format 01861. 00000 - "le littéral ne correspond pas à la chaîne de format"

* Cause: les littéraux de l'entrée doivent avoir la même longueur que ceux de la chaîne de formatage (à l'exception des espaces de début). Si le modificateur "FX" a été activé, le littéral doit correspondre exactement, sans espace supplémentaire.

* Action: Corrigez la chaîne de format pour qu'elle corresponde au littéral.

41
user3521826

Comme votre chaîne de requête est littérale, et en supposant que vos dates soient correctement stockées sous le nom DATE, vous devez utiliser littéraux de date :

_SELECT * FROM OrderArchive
WHERE OrderDate <= DATE '2015-12-31'
_

Si vous souhaitez utiliser le paramètre TO_DATE (car, par exemple, la valeur de votre requête n'est pas un littéral), je vous suggère de définir explicitement le paramètre NLS_DATE_LANGUAGE comme vous le souhaitez. utilisent des noms de mois abrégés aux États-Unis. De cette façon, cela ne se produira pas sur certaines installations Oracle localisées:

_SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31 Dec 2014', 'DD MON YYYY',
                           'NLS_DATE_LANGUAGE = American');
_
52
Sylvain Leroux

Vous devez convertir la chaîne en date à l'aide de la fonction to_date()

SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31-Dec-2014','DD-MON-YYYY');

OR

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');

Cela ne fonctionnera que si OrderDate est stocké dans Date format. Si c'est Varchar vous devriez appliquer to_date() func sur cette colonne aussi comme

 SELECT * FROM OrderArchive
    WHERE to_date(OrderDate,'yyyy-Mm-dd') <= to_date('2014-12-31','yyyy-MM-dd');
28
Sachu

vous devez utiliser la fonction To_Date () pour convertir la chaîne en date! http://www.techonthenet.com/Oracle/functions/to_date.php

1
kamokaze