日期导入不正确

问题描述

我知道之前已经发布过类似的问题,但是当我根据评论中的建议尝试遵循类似的方法时,它根本无济于事。我的查询如下:

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认格式,但 '%d-%b-%y' 函数中的 STR_TO_DATE 应该有帮助缓解这个问题,因为

%d:作为数值的月份中的第几天(01 到 31)-

%b:缩写月份名称(一月到十二月)-

%y:作为数字的 2 位数字值的年份

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

解决方法

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

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,STL_DT = STR_TO_DATE(@STL_DT,TRD_DT = STR_TO_DATE(@TRD_DT,'%d-%b-%y');

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...