Mysql-日期和时间列到日期时间

Mysql-日期和时间列到日期时间,mysql,Mysql,我一直在尝试将日期和时间合并为日期时间。我的日期是varchar,我需要有一列datetime(作为datetime) 我的意见是: create table t1 ( date1 varchar (12), time1 varchar (39)); INSERT INTO t1 VALUES ('01.Mar.2019', '11:30'), ('02.Mar.2019', '1:30'), ('03.Mar.2019', '0:30'), ('03.Mar.2019', '10:30');

我一直在尝试将日期和时间合并为日期时间。我的日期是varchar,我需要有一列datetime(作为datetime)

我的意见是:

create table t1 (
date1 varchar (12),
time1 varchar (39));

INSERT INTO t1 VALUES
('01.Mar.2019', '11:30'),
('02.Mar.2019', '1:30'),
('03.Mar.2019', '0:30'),
('03.Mar.2019', '10:30');
预期结果如下:

datetime1
01.Mar.2019 11:30:00
02.Mar.2019 01:30:00
03.Mar.2019 00:30:00
03.Mar.2019 10:30:00

虽然我觉得存储这些值的方式不是最好的解决方案,但您可以使用
CONCAT
将单独的
VARCHAR
连接在一起,然后
STR_to_DATE
将字符串转换为
DATETIME
,以当前存储格式将数据显示为
DATETIME

SELECT STR_TO_DATE(CONCAT(date1, ' ', time1), '%d.%b.%Y %k:%i') FROM t1;
这分为两部分:

CONCAT(date1, ' ', time1)
将日期和时间与空格合并为一个字符串,如下所示:

01.Mar.2019 11:30
02.Mar.2019 1:30
03.Mar.2019 0:30
03.Mar.2019 10:30
然后,
STR\u TO\u DATE
使用格式说明符将其转换为
DATETIME

STR_TO_DATE(CONCAT(date1, ' ', time1), '%d.%b.%Y %k:%i')
因此,格式是:

%d—如果是1个数字(01、02、03等),则前导为零的月份的第几天

%b-三个字符的缩写月份名称(一月、二月、三月等)

%Y—四位数年份(2018年、2019年等)

%k-24小时格式的小时,不带前导零(0、1、2等)

%i-前导零的分钟数(00、01、02等)

其输出将为:

2019-03-01 11:30:00
2019-03-02 01:30:00
2019-03-03 00:30:00
2019-03-03 10:30:00

我只想补充一点,我觉得在数据库中存储日期和时间信息的最佳方法几乎肯定是使用
DATETIME
列。

这不应该是您想要的输出!!!使用
DATETIME
数据类型存储日期时间。然后,MySQL中内置的所有日期功能都将发挥作用,并在以后处理这些数据时使您的生活更加轻松。哦,用日期来表示日期,用时间来表示时间。恐怕我听不懂你的问题。什么是
datetime1
2019-03-01 11:30:00
2019-03-02 01:30:00
2019-03-03 00:30:00
2019-03-03 10:30:00