web-dev-qa-db-fra.com

Mise à jour d'une date dans une table Oracle SQL

J'essaie de mettre à jour une date dans une table SQL. J'utilise Peoplesoft Oracle. Quand j'exécute cette requête:

Select ASOFDATE from PASOFDATE;

Je reçois le 16/04/2012

J'ai essayé de lancer cette requête

UPDATE PASOFDATE SET ASOFDATE = '11/21/2012';

mais ça ne fonctionne pas.

Est-ce que quelqu'un sait comment je changerais la date à celle désirée?

24
Stack Over

Ceci est basé sur l'hypothèse selon laquelle vous obtenez une erreur concernant le format de la date, telle qu'une valeur de mois non valide ou un caractère non numérique lorsque vous attendez numérique .

Les dates stockées dans la base de données n'ont pas de format. Lorsque vous interrogez la date à laquelle votre client met en forme la date à afficher, sous la forme 4/16/2011. Normalement, le même format de date est utilisé pour la sélection et la mise à jour des dates, mais dans ce cas, elles semblent différentes - votre client est donc apparemment en train de faire quelque chose de plus complexe que SQL * Plus, par exemple.

Lorsque vous essayez de le mettre à jour, il utilise un paramètre par défaut modèle de format de date . En raison de la façon dont il est affiché, vous supposez que c'est MM/DD/YYYY, mais cela ne semble pas être le cas. Vous pouvez savoir ce que c'est, mais il est préférable de ne pas se fier au modèle de format par défaut ou implicite.

Que ce soit le problème ou non, vous devez toujours spécifier le modèle de date:

UPDATE PASOFDATE SET ASOFDATE = TO_DATE('11/21/2012', 'MM/DD/YYYY');

Puisque vous ne spécifiez pas de composant horaire (toutes les colonnes Oracle DATE incluent une heure, même si il est minuit), vous pouvez également utiliser un littéral de date :

UPDATE PASOFDATE SET ASOFDATE = DATE '2012-11-21';

Vous devriez peut-être vérifier que la valeur actuelle n'inclut pas d'heure, bien que le nom de la colonne l'indique.

73
Alex Poole

Si ce code SQL est utilisé dans un code spécifique de peoplesoft (Application Engine, SQLEXEC, SQLfetch, etc.), vous pouvez utiliser% Datein metaSQL. Peopletools convertit automatiquement la date dans un format accepté par la plate-forme de base de données sur laquelle l'application est exécutée.

Si ce code SQL est utilisé pour effectuer une mise à jour principale à partir d'un analyseur de requête (tel que SQLDeveloper, SQLTools), le format de date utilisé est incorrect. Oracle s'attend à ce que le format de date soit JJ-MMM-AAAA, où MMM pourrait être JAN, FEB, MAR, etc.

1
navi