【问题标题】:Change date format that MySQL reads更改 MySQL 读取的日期格式
【发布时间】:2010-09-29 03:01:10
【问题描述】:

我有一个为 Oracle 数据库创建的批处理文件,我现在正尝试将其导入 MySQL 数据库。我不得不处理两者之间的各种不一致。该文件的所有日期都为“17-NOV-1981”,而不是 MySQL 预期的“1981-11-17”。

批处理文件有命令 ALTER SESSION set nls_date_format='DD-MON-YYYY'; 来设置日期格式。 MySQL 中是否有等效的方法可以让它按原样接受日期而无需主要编辑文件?

【问题讨论】:

    标签: mysql date format


    【解决方案1】:

    我认为不修改 SQL 是不可能的。

    STR_TO_DATE 可以在插入语句中用于转换字符串,或者您可以尝试通过sed 管道传输文件并使用正则表达式来发现日期并重新处理它们,例如像这样的东西会用调用 str_to_date 替换原始转储中的单引号日期,并将生成的转换后的 sql 通过管道传输到 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
    

    【讨论】:

    • 我将结尾改为 > output.sql 但我得到的只是完全相同的文件。日期没有更改。
    • 也许您需要为您的数据调整正则表达式,不过我在发布之前确实在示例文件上对其进行了测试。为什么注意发布你的 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")/'
    • 不,它们是单引号日期。一个完整的行示例如下: INSERT INTO ord (TOTAL, SHIPDATE, ORDID, ORDERDATE, CUSTID, COMMPLAN) VALUES ('710', '06-FEB-2002', '615', '01-FEB-2002', '107', '');
    • 我忘记添加全局修饰符(模式后的“g”)。 sed "s/'[0-9][0-9]-(一月\|二月\|三月\|四月\|五月\|六月\|七月\|八月\|九月\|十月\|十一月\| DEC)-[1-2][0-9][0-9][0-9]'/str_to_date(&, '%d-%b-%Y')/g" 在您的测试数据上为我工作(还要注意我使用的是 bash shell)
    猜你喜欢
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多