SQL “n'est pas valide mois”
J'ai une table dans sql comme suit:
CREATE TABLE Reserves(
sid INTEGER,
bid INTEGER,
day DATE,
PRIMARY KEY (sid, bid, day),
FOREIGN KEY (sid) REFERENCES Sailors,
FOREIGN KEY (bid) REFERENCES Boats
);
et je vais essayer d'insérer en elle:
INSERT INTO Reserves VALUES(22, 101, '01-01-1998');
Mais j'obtiens l'erreur: ORA-01843: pas valide d'un mois
C'est un Oracle db. Je ne sais pas quel est le problème avec mon format de la date.
- En règle générale, vous devez toujours utiliser une culture inspecific format de la date (aaaammjj), sauf si vous déclarez le format de la date explcitly.
02-01-2012
pourrait être 2 janvier 2012 et le 1er février 2012, cependant20120102
est toujours le 2 janvier 2012
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas tout à fait clair que vous avez voulu, de sorte que vous pourriez essayer:
Pour mois-jour-année format:
INSERT INTO Reserves VALUES(22, 101, TO_DATE('01-01-1998','MM-DD-YYYY'));
Pour jour-mois-année format:
INSERT INTO Reserves VALUES(22, 101, TO_DATE('01-01-1998','DD-MM-YYYY'));
Aussi, une lecture recommandée: Fonctions Oracle: TO_DATE
Vous pouvez utiliser le
date
mot-clé pour spécifier une norme ANSI-chaîne de date:Dans ce cas, le format AAAA-MM-JJ ou le 1er janvier 1998.
Comme @Jody également mentionné,
Vous pouvez modifier la valeur par défaut pour votre session, par l'exécution de ce code une fois avant de
INSERT
:ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MM-YYYY';
Vous pouvez modifier le format dans n'importe quel ordre.
Source: dba-oracle.com
Essayer '1998-01-01'.
Je crois que le format de date par défaut pour oracle est aaaa-mm-jj. Vous pouvez modifier la valeur par défaut pour votre session à l'aide de alter session set nls_date_format= "mm-jj-aaaa"
Garder à l'esprit que la plupart des clients vous permettent de définir ce que vous voulez de façon permanente
Vous pouvez également essayer en dessous de format de la requête:
INSERT INTO Reserves VALUES(22, 101, DATE '01-01-1998');
DATE
mot-clé interprète la chaîne de caractères comme une date.