Cambia il formato della data letto da MySQL
Domanda
Ho un file batch creato per un database Oracle che sto cercando di importare in un database MySQL. Ho dovuto affrontare ogni sorta di incoerenza tra i due. Il file ha tutte le date come '17 -NOV-1981 'piuttosto che' 1981-11-17 'come previsto da MySQL.
Il file batch aveva il comando ALTER SESSION set nls_date_format = 'DD-MON-YYYY'; per impostare il formato della data. Esiste un equivalente in MySQL per far sì che accetti le date così com'è senza dover modificare in modo sostanziale il file?
Soluzione
Non credo sia possibile senza modificare l'SQL.
STR_TO_DATE potrebbe essere utilizzato nelle istruzioni insert per convertire le stringhe oppure provare a eseguire il piping del file tramite sed e usa una regex per individuare le date e rielaborarle, ad es. qualcosa del genere sostituirebbe le singole date tra virgolette nel dump originale con chiamate a str_to_date e reindirizzerebbe il sql trasformato risultante in 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