J'ai une colonne de date dans une table stockée au format MM/DD/YYYY
. Je dois sélectionner et stocker la même date dans une autre table au format YYYY-MM-DD
, à savoir le format de date XSD. Mais je ne suis pas capable de le faire. J'utilise cette requête:
select to_date(date_column,'YYYY-MM-DD') from table;
Mais je ne suis toujours pas capable de le faire. Me donner l'erreur
ORA-01843: mois non valide
utilisation
select to_char(date_column,'YYYY-MM-DD') from table;
On dirait que vous l'avez mal compris. Si vos données existantes sont au format MM/JJ/AAAA, vous souhaitez:
select to_date(date_column,'MM/DD/YYYY') from table;
convertir les données existantes en valeurs DATE. (Je me demande pourquoi ils ne sont pas stockés sous forme de dates, pour être honnête ...)
Si vous souhaitez effectuer la conversion en une étape, vous souhaiterez peut-être:
select to_char(to_date(date_column,'MM/DD/YYYY'), 'YYYY-MM-DD') from table;
En d'autres termes, pour chaque ligne, analysez-la au format MM/JJ/AAAA, puis reformatez-la au format AAAA-MM-JJ.
(Je suggérerais quand même d'essayer de conserver les données dans leur type "naturel" cependant, plutôt que de les stocker sous forme de texte en premier lieu.)
Je suppose que vous pouvez utiliser Oracle SQL Developer, que vous pouvez télécharger depuis ici .
Vous pouvez définir le format de date avec lequel vous souhaitez travailler:
ALTER SESSION SET nls_date_format='yyyy-mm-dd';
Avec cela, vous pouvez maintenant effectuer une requête comme celle-ci:
SELECT * FROM emp_company WHERE JDate = '2014-02-25'
Si vous voulez être plus précis, vous pouvez définir le format de date comme ceci:
ALTER SESSION SET nls_date_format='yyyy-mm-dd hh24:mi:ss';
select to_date(to_char(ORDER_DATE,'YYYY/MM/DD'))
from ORDERS;
Cela pourrait aider mais, à la fin, vous obtiendrez une chaîne et non la date. Apparemment, votre problème de format sera résolu à coup sûr.
Pour convertir une colonne DATE
dans un autre format, utilisez simplement TO_CHAR()
avec le format souhaité, puis reconvertissez-la en un type DATE
:
SELECT TO_DATE(TO_CHAR(date_column, 'DD-MM-YYYY'), 'DD-MM-YYYY') from my_table
Cela a fonctionné pour moi! Vous pouvez convertir en type de données que vous voulez soit une date ou une chaîne
to_char(TO_DATE(TO_CHAR(end_date),'MM-DD-YYYY'),'YYYY-MM-DD') AS end_date
Selon les commentaires, le type de données dans le datatable est DATE . Vous devriez donc simplement utiliser: "Select date_column from table;"
Maintenant, si vous exécutez la sélection, vous récupérerez un type de données de date, qui devrait correspondre à ce dont vous avez besoin pour .xsd.
Le formatage de la date dépendant de la culture doit être effectué dans l'interface graphique (la plupart des langues disposent de moyens pratiques de le faire), et non dans l'instruction select.
Fondamentalement, les données d'une colonne Date dans Oracle peuvent être stockées dans n'importe quel format défini par l'utilisateur ou conservées par défaut .. .. Tout dépend du paramètre NLS.
Le format actuel peut être vu par: SELECT SYSDATE FROM DUAL;
Si vous essayez d'insérer un enregistrement et que l'instruction n'est PAS dans CE format, il générera: ORA-01843: erreur de mois non valide . Commencez donc par modifier le format de la date de la base de données vous avez un chargement en bloc d’instructions d’insertion), puis exécutez le script d’insertion.
Le format peut être modifié de la manière suivante: ALTER SESSION SET nls_date_format = 'mm/jj/aaaa hh24: mi: ss';
Vous pouvez également modifier les paramètres NLS à partir de l'interface graphique du développeur SQL (Outils> préférences> Base de données> NLS).
Pour le formatage de l'heure militaire,
select TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mm:ss') from DUAL
--2018-07-10 15:07:15
Si vous voulez que votre date arrondisse au mois, jour, heure, minute, vous pouvez essayer
SELECT TO_CHAR( SYSDATE, 'yyyy-mm-dd hh24:mi:ss') "full-date" --2018-07-11 10:40:26
, TO_CHAR( TRUNC(SYSDATE, 'year'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-year"-- 2018-01-01 00:00:00
, TO_CHAR( TRUNC(SYSDATE, 'month'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-month" -- 2018-07-01 00:00:00
, TO_CHAR( TRUNC(SYSDATE, 'day'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-Sunday" -- 2018-07-08 00:00:00
, TO_CHAR( TRUNC(SYSDATE, 'dd'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-day" -- 2018-07-11 00:00:00
, TO_CHAR( TRUNC(SYSDATE, 'hh'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-hour" -- 2018-07-11 10:00:00
, TO_CHAR( TRUNC(SYSDATE, 'mi'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-minute" -- 2018-07-11 10:40:00
from DUAL
Pour les littéraux de formats, vous trouverez de l'aide dans https://docs.Oracle.com/cd/B28359_01/server.111/b28286/functions242.htm#SQLRF52037