当前位置:   article > 正文

mysql datetime为空不显示_将null和格式不正确的datetime值导入datetime列MySQL

mysql datetime 插入后为空

我正在使用带有Sequel Pro界面的MySQL数据库,并且是SQL新手.我正在尝试从csv文件导入数据,我导入的其中一个列是datetime类型.但是,我收到数据的格式是mm / dd / yy hh:mm AM / PM或null.最初,我将列的类型修改为varchar以避免问题,但现在我需要对数据执行一些日期函数,除非列具有日期时间类型和格式,否则无法完成,所以我需要一种方法将传入的数据转换为正确的日期时间格式.

此外,不了解SQL或数据库的人将会运行import语句,因此最好让他们只需单击文件 – 导入,而不必在mysql命令行中输入任何复杂的内容.此外,在运行查询后,我需要以相同的格式导出数据(mm / dd / yy hh:mm AM / PM或null).

以下是该列的一些示例值:

Completion Time

null

6/16/14 10:33 AM

null

null

6/16/14 13:03 PM

6/17/14 13:53 PM

6/18/14 14:38 PM

6/18/14 14:52 PM

6/19/14 13:13 PM

6/18/14 18:56 PM

6/18/14 19:02 PM

null

我收集的一个可能简单的解决方案可能不是几个小时的谷歌搜索,这将是保持列类型为varchar然后以某种方式提取输入数据的mm / dd / yy部分,转换到正确的MySQL日期格式,然后执行我的日期功能.

无论如何,任何帮助将不胜感激.

解决方法:

使用MySQL的日期和时间函数并不是很困难. STR_TO_DATE执行导入所需的操作:

the format I receive the data in is mm/dd/yy hh:mm AM/PM or null.

你得到你的DATETIME值

STR_TO_DATE(yourValue, '%m/%d/%y %h:%i %p')

您可以在函数DATE_FORMAT的描述中找到STR_TO_DATE的说明符

对于导出,您使用已提到的函数DATE_FORMAT执行相反的操作,其格式字符串完全相同:

SELECT DATE_FORMAT(your_datetime_col, '%m/%d/%y %h:%i %p')

看看这个Demo

您可以在INSERT语句中执行转换,如下所示:

INSERT INTO example (date_time) VALUES

(STR_TO_DATE('09/26/14 07:30 AM', '%m/%d/%y %h:%i %p'));

看到它在更新的Demo中工作

使用LOAD DATA INFILE自定义导入

让我们有一个表示例,其中包含两列id和date_time

CREATE TABLE example (

id INT NOT NULL PRIMARY KEY,

date_time DATETIME

);

我们还有一个CSV文件example.csv,其中包含以下数据:

id,date

1,09/26/14 07:30 AM

2,07/23/14 07:30 PM

要使用LOAD DATA INFILE导入此文件,您将使用以下语句:

LOAD DATA INFILE 'path/on/server/to/example.csv'

INTO TABLE example

FIELDS TERMINATED BY ','

LINES TERMINATED BY '\n'

IGNORE 1 LINES -- because of the column headers in the first line

(id, @var1) -- You've got to map every field of your csv file to a column

-- of your table.

-- You've got to list the names of the columns of your table,

-- not the headers in the csv file.

-- if one field should be ignored, use another variable for this

-- field.

SET date_time = STR_TO_DATE(@var1, '%m/%d/%y %h:%i %p');

如果csv文件中的日期包含指示NULL值的文字字符串“null”,则使用CASE运算符:

date

09/26/14 07:30 AM

null

07/23/14 07:30 PM

然后我们必须使用

LOAD DATA INFILE 'path/on/server/to/example.csv'

INTO TABLE example

FIELDS TERMINATED BY ','

LINES TERMINATED BY '\r\n' -- your line endings

IGNORE 1 LINES -- because of the column headers in the first line

(@var1) -- read all parts of the date in variables

SET completionTime = CASE

WHEN @var1 = 'null' THEN NULL

ELSE STR_TO_DATE(@var1, '%m/%d/%y %h:%i %p')

END;

包含分隔符的字段的问题,在本例中是逗号,您已经解决了用封闭字符包围这些字段(或简单地全部).

但我们真的应该看看你的真实格式.

标签:mysql,datetime,sequelpro

来源: https://codeday.me/bug/20190624/1277930.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/253748
推荐阅读
相关标签
  

闽ICP备14008679号