Mysql-日期和时间列到日期时间
我一直在尝试将日期和时间合并为日期时间。我的日期是varchar,我需要有一列datetime(作为datetime) 我的意见是: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');
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