0

我是 SQL 新手,目前我正在做一个关于连接两个数据集的任务,其中一个数据集是我自己创建的,这是我使用的查询:

USE `abcde`;
CREATE TABLE `test_01`( 
`ID` varchar(50) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`NUMBER01` bigint(20) NOT NULL DEFAULT '0',
`NUMBER02` bigint(20) NOT NULL, 
`date01` date DEFAULT NULL, 
PRIMARY KEY (`ID`, `date01`))

然后我将数据从 csv 文件加载到该表中,csv 文件如下所示:

ID       NUMBER01    NUMBER02    DATE01
aaa=ee   12345678    235896578   **2009-01-01T00:00:00**

如果我查询这个新创建的表,它看起来像这样(“DATE01”的格式发生了变化):

ID       NUMBER01    NUMBER02    DATE01
aaa=ee   12345678    235896578   **2009-01-01**

另一个数据集,我查询并导出到 csv 文件,date01 列的格式类似于01/12/1979,在 SQL 中格式类似于1979-12-01.

对于新创建的数据集,我还曾经select * from information_schema.columns检查需要加入的列的数据类型: 在此处输入图像描述

另一个数据集的日期列是:在此处输入图像描述 不同之处是: 1. csv 中日期列的格式出现不同 2.COLUMN_DEFAULT不同,一个是0000-00-00,另一个是NULL

我想知道为什么我得到空输出的原因可能是因为“日期”格式的不同,但我不知道如何使它们相同,以便我可以在输出中得到一些东西,有人能给我一些提示吗?谢谢你。

4

1 回答 1

1

“DATE01”的格式发生了变化

当然,DATE 数据类型不包含时区信息/组件。

我想知道我得到空输出的原因可能是因为“日期”格式的不同

如果输入值有一些缺点(如错误的数据格式),则相应的值将被截断或设置为 NULL。请参阅 - 在导入期间您必须获得一堆警告,类似于“截断不正确的值”。

如果 CSV 中的日期字段格式错误,则必须使用中间用户定义变量来接受原始值,并在 SET 子句中对其应用适当的转换表达式。喜欢

LOAD DATA INFILE ...
INTO TABLE tablename (field1, ..., @date01)
SET date01 = STR_TO_DATE(@date01, '%d/%m/%Y');
于 2020-05-14T10:36:45.973 回答