【问题标题】:inner join two datasets but return nothing without any error (date format issue)?内部连接两个数据集但没有任何错误返回(日期格式问题)?
【发布时间】:2020-08-30 19:43:53
【问题描述】:

我是 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

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

【问题讨论】:

    标签: mysql mysql-workbench sqldatatypes column-defaults


    【解决方案1】:

    “DATE01”的格式发生变化

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

    我想知道为什么我得到空输出的原因可能是因为“日期”格式的差异

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

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

    LOAD DATA INFILE ...
    INTO TABLE tablename (field1, ..., @date01)
    SET date01 = STR_TO_DATE(@date01, '%d/%m/%Y');
    

    【讨论】:

    • 我做了一些探索并更改了日期的默认设置,它可以工作!谢谢。
    • 如果我尝试使用 SET date01 = STR_TO_DATE(@date01, '%d/%m/%Y'); ,我得到一个错误 Error Code: 1193. Unknown system variable 'date01'
    • @Cecilia 请暂时在问题文本中插入完整的查询代码。
    猜你喜欢
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 2019-08-19
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多