【问题标题】:Dates not importing correctly日期未正确导入
【发布时间】:2021-04-16 00:50:07
【问题描述】:

我知道之前已经发布过类似的问题,但是当我尝试按照 cmets 中的建议遵循类似的方法时,它根本没有帮助。我的查询如下:

LOAD DATA INFILE 'File.txt'
IGNORE
INTO TABLE table_name
FIELDS TERMINATED BY '^~'
LINES TERMINATED BY '\r\n'
IGNORE 1 ROWS
(RUN_DATE, PROC_DT, STL_DT, TRD_DT)
SET RUN_DATE = STR_TO_DATE(RUN_DATE, '%d-%b-%y'); 

文件中的记录如下所示:

RUN_DATE^~PROC_DT^~STL_DT^~TRD_DT
21-DEC-20^~23-DEC-20^~23-DEC-20^~21-DEC-20

加载的日期全部填充为'0000-00-00 00:00:00',我知道这是出现数据类型错误并使用IGNORE 时的默认值。从我在网上找到的内容来看,这个问题与文件内日期不是 yyyy-mm-dd 格式有关,这是 mySQL 的默认格式,但 STR_TO_DATE 函数中的 '%d-%b-%y' 应该有助于缓解这个问题,因为

%d:以数值形式表示的月份中的某天(01 到 31)-

%b:缩写月份名称(1 月到 12 月)-

%y:年份,两位数

为什么这没有帮助?我还尝试使用LOWER() 将月份设为小写,我认为缩写月份可能需要全部小写,但这会产生相同的结果。我在这里错过了什么?

【问题讨论】:

    标签: mysql date-formatting load-data-infile str-to-date


    【解决方案1】:

    要从文件中读取但存储修改后的值,您需要使用变量:

    LOAD DATA INFILE 'File.txt'
    IGNORE
    INTO TABLE table_name
    FIELDS TERMINATED BY '^~'
    LINES TERMINATED BY '\r\n'
    IGNORE 1 ROWS
    (@RUN_DATE, @PROC_DT, @STL_DT, @TRD_DT)
    SET RUN_DATE = STR_TO_DATE(@RUN_DATE, '%d-%b-%y'),
        PROC_DT = STR_TO_DATE(@PROC_DT, '%d-%b-%y'),
        STL_DT = STR_TO_DATE(@STL_DT, '%d-%b-%y'),
        TRD_DT = STR_TO_DATE(@TRD_DT, '%d-%b-%y');
    

    【讨论】:

    • 对不起,我在一处输入了错误的变量名
    • 可能 STR_TO_DATE 无法解析日期并返回 NULL。显示最终为 NULL 的值?
    • 要么你的数据有问题,要么你的 sql 有问题。显示您的完整 sql 和无法正常工作的数据行?
    • 如果您在 LOAD DATA 之后立即执行 SHOW WARNINGS;,会显示什么?
    • SHOW CREATE TABLE table_name 是否显示日期列类型之间的任何差异?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    相关资源
    最近更新 更多