2009-01-01 5 views
0

J'ai un fichier de traitement par lots qui a été créé pour une base de données Oracle que j'essaie maintenant d'importer dans une base de données MySQL. J'ai dû faire face à toutes sortes d'incohérences entre les deux. Le fichier a toutes les dates comme '17 -NOV-1981 'plutôt que' 1981-11-17 'comme le prévoit MySQL.Modifier le format de date lu par MySQL

Le fichier de commandes contenait la commande ALTER SESSION définie nls_date_format = 'DD-MON-YYYY'; pour définir le format de la date. Existe-t-il un équivalent dans MySQL pour qu'il accepte les dates telles quelles sans avoir à modifier de façon importante le fichier?

Répondre

2

Je ne crois pas que ce soit possible sans modifier le SQL.

STR_TO_DATE peut être utilisé dans les instructions d'insertion pour convertir les chaînes, ou vous pouvez essayer d'acheminer le fichier via sed et utiliser une regex pour repérer les dates et les retravailler, par ex. quelque chose comme cela remplacerait les dates indiquées dans votre unique décharge d'origine avec des appels à str_to_date, et le tuyau sql transformé résultant en mysql ...

cat oracledump.sql | sed "s/'[0-9][0-9]-\(JAN\|FEB\|MAR\|APR\|MAY\|JUN\|JUL\|AUG\|SEP\|OCT\|NOV\|DEC\)-[1-2][0-9][0-9][0-9]'/str_to_date(&, '%d-%b-%Y')/g" | mysql newdb 
+0

J'ai changé la fin de> output.sql mais je n'ai eu exactement même fichier. Les dates n'avaient pas été changées. – thornate

+0

Peut-être que vous avez besoin de modifier la regex pour vos données, je l'ai testé sur un exemple de fichier avant de poster. Pourquoi note poster un fragment de votre SQL? –

+0

Notez qu'il a cherché des guillemets doubles, pour les guillemets simples, vous pourriez aller avec sed 's/"[0-9] [0-9] - \ (JAN \ | FEB \ | MAR \ | APR \ | MAY \ | JUIN \ | JUL \ | AUG \ | SEP \ | OCT \ | NOV \ | DEC \) - [1-2] [0-9] [0-9] [0-9] "/ str_to_date (&,"% d-% b-% Y ")/' –