mysql将字符串转换为表名_Mysql 25道练习题——时间字符串相互转换(工作必备)...

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

年目标:完成7周入门数据工程师系列文章

在学习SQL语言时,我们一般都是从MYSQL开始学习,并且对查询语言掌握得很好,但很多人遇见时间格式转换时却无从下手,有时半天都不能解决一个问题。

如果你刚学习SQL把本篇文章一定要好好练习;如果你已进入行业一定要掌握文章内容,最好自己总结一下。

目录

一、Mysql中经常用来存储日期的数据类型

二、工作中常见的时间存储格式

三、30道时间练习题

四、建表语句及数据插入

一、Mysql中常用来存储日期的数据类型

在学习时间类型转换之前,先了解下Mysql中经常用来存储日期的数据类型,主要有有三种:Date、Datetime、Timestamp。

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Mysql中常用来存储日期的数据类型

1、Date数据类型:用来存储没有时间的日期。获取和显示这个类型的格式为“YYYY-MM-DD”。支持的时间范围为“1000-00-00”到“9999-12-31”

2、Datetime类型:存储既有日期又有时间的数据。存储和显示的格式为 “YYYY-MM-DD HH:MM:SS”。支持的时间范围是“1000-00-00 00:00:00”到“9999-12-31 23:59:59”。

3、Timestamp类型:也是存储既有日期又有时间的数据。存储和显示的格式跟Datetime一样,为 “YYYY-MM-DD HH:MM:SS”。支持的时间范围是“1970-01-01 00:00:01”到“2038-01-19 03:14:07”

备注:当然啦,有些表中还会用文本数据类型来存储时间。所以我们在进行时间格式转换之前,首先一定要知道时间是用什么数据类型来存储。

在MYSQL中,desc 表名,可以查看表结构

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

二、工作中常见的时间存储形式

学习该部分内容的时候,只需要看时间字段是用什么数据类型存储,及时间在 表中显示的格式。

1、以字符串的数据形式存储时间

问题:不方便时间查询和时间范围筛选

select * from test_payment_two;

desc test_payment_two;

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

时间的数据类型为字符串

2、以字符串的数据形式存储时间

问题:不方便时间查询和时间范围筛选

select * from test_payment_three;

desc test_payment_three

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

时间的数据类型为字符串

3、时间分别存放在年、月、日、小时4个字段中

问题:不方便时间查询和时间范围筛选

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

时间的数据类型为字符串

4、时间的数据类型为date

问题,只能存储年月日,不能存储小时。可以进行时间范围的查找。

select * from test_payment_four;

desc test_payment_four

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

时间的数据类型为date

5、时间的数据类型为datetime

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

时间的数据类型为datetime

三、25道时间练习题

01、时间转换函数

在练习之前先看下MYSQL中的时间格式转化的函数,我们在做练习的时候就是这两个函数的反复运用。

第一次练习的时候一定要把这些题练完,在以后工作中记住相关的函数即可

1.时间转字符串

DATE_FORMAT(日期,格式字符串),也可以将字符串转化为字符串的格式

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');

2.字符串转时间

STR_TO_DATE(字符串,日志格式)

SELECT STR_TO_DATE('2019-01-20 16:01:45', '%Y-%m-%d %H:%i:%s');

02、使用的表

test_payment

test_payment_two

test_payment_three

test_payment_four

test_payment_five

03、练习题

1、将test_payment中year、month day hour四个字段拼接在一起,显示为“YYYY-MM-DD HH:MM:SS”的时间格式。

2、将test_payment中year、month day四个字段拼接在一起,显示为“YYYYMMDD”的字符串格式。

3、查询test_payment中2019-5-1以后的数据

4、查询test_payment中2019-5-1至2019-8-1之间的数据

5、将表test_payment_two的paytime字段显示为“YYYY-MM-DD HH:MM:SS”的时间格式。

6、将表test_payment_two的paytime字段显示为“YYYY-MM-DD HH:MM:SS”的字符串格式。

7、将表test_payment_two的paytime字段显示为“YYYY-MM-DD”的的时间格式。

8、将表test_payment_two的paytime字段显示为“YYYYMMDD”的的字符串格式。

9、将表test_payment_two的paytime字段显示为“YYYYMMDD”的的字符串格式。

10、查询表test_payment_two中 “2019-5-1 9点” 以后的数据

11、查询表test_payment_two中“2019-5-1”至“2019-8-1”之间的数据

12、将表test_payment_three的paytime字段显示为“YYYY-MM-DD HH:MM:SS”的时间格式。

13、将表test_payment_three的paytime字段显示为“YYYY-MM-DD”的时间格式。

14、将表test_payment_three的paytime字段显示为“YYYYMMDD”的字符串格式。

15、将表test_payment_three的paytime字段显示为“YYYY-MM-DD HH:MM:SS”的字符串格式。

16、查询表test_payment_three中 “2019-3-1” 以后的数据

17、查询表test_payment_three中“2019-5-1”至“2019-8-1”之间的数据

18、将表test_payment_four的paytime字段显示为“YYYY-MM-DD”的字符串格式。

19、将表test_payment_four的paytime字段显示为“YYYYMMDD”的字符串格式。

20、查询表test_payment_four中 “2019-3-1” 以后的数据

21、查询表test_payment_four中“2019-5-1”至“2019-8-1”之间的数据

22、将表test_payment_five的paytime字段显示为“YYYY-MM-DD HH:MM:SS”的字符串格式。

23、将表test_payment_five的paytime字段显示为“YYYYMMDD”的字符串格式。

24、查询表test_payment_five中 “2019-3-1” 以后的数据

25、查询表test_payment_five中“2019-5-1”至“2019-8-1”之间的数据

1、将test_payment中year、month day hour四个字段拼接在一起,显示为“YYYY-MM-DD HH:MM:SS”的时间格式。

select STR_TO_DATE(concat(concat_ws('-',year,month,day),' ',hour), '%Y-%m-%d %H:%i:%s')paytime,product_code,money

from test_payment

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

2、将test_payment中year、month day四个字段拼接在一起,显示为“YYYYMMDD”的字符串格式。

select DATE_FORMAT(STR_TO_DATE(concat_ws('-',year,month,day),

'%Y-%m-%d'),'%Y%m%d')paytime,product_code,money

from test_payment

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

3、查询test_payment中2019-5-1以后的数据

select * from test_payment

where STR_TO_DATE(concat_ws('-',year,month,day),'%Y-%m-%d')>='2019-5-1'

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

4、查询test_payment中2019-5-1至2019-8-1之间的数据

select * from test_payment

where STR_TO_DATE(concat_ws('-',year,month,day),'%Y-%m-%d')between '2019-5-1' and '2019-8-1'

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

5、将表test_payment_two的paytime字段显示为“YYYY-MM-DD HH:MM:SS”的时间格式。

select STR_TO_DATE(paytime, '%Y-%m-%d %H:%i:%s')paytime ,product_code,money from test_payment_two

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

6、将表test_payment_two的paytime字段显示为“YYYY-MM-DD HH:MM:SS”的字符串格式。显示为24小时的格式

select DATE_FORMAT(paytime, '%Y-%m-%d %H:%i:%S')paytime ,product_code,money

from test_payment_two

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

7、将表test_payment_two的paytime字段显示为“YYYY-MM-DD”的的时间格式。

select STR_TO_DATE(paytime, '%Y-%m-%d')paytime ,product_code,money from test_payment_two

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

8、将表test_payment_two的paytime字段显示为“YYYYMMDD”的的字符串格式。

select DATE_FORMAT(paytime, '%Y%m%d')paytime ,product_code,money from test_payment_two

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

9、将表test_payment_two的paytime字段显示为“YYYY-MM-DD HH:MM:SS”的的时间格式。

select STR_TO_DATE(paytime , '%Y-%m-%d %H:%i:%s')paytime ,product_code,money

from test_payment_two

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

10、查询表test_payment_two中 “2019-5-1 9点” 以后的数据

select * from test_payment_two where STR_TO_DATE(paytime , '%Y-%m-%d %H:%i:%s')>='2019-5-1 9'

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

11、查询表test_payment_two中“2019-5-1”至“2019-8-1”之间的数据

select * from test_payment_two

where STR_TO_DATE(paytime , '%Y-%m-%d %H:%i:%s')between '2019-5-1' and '2019-8-1'

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

12、将表test_payment_three的paytime字段显示为“YYYY-MM-DD HH:MM:SS”的时间格式。

select str_to_date(DATE_FORMAT(paytime , '%Y-%m-%d %H:%i:%s'), '%Y-%m-%d %H:%i:%s')paytime,product_code,money

from test_payment_three

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

13、将表test_payment_three的paytime字段显示为“YYYY-MM-DD”的时间格式。

select str_to_date(DATE_FORMAT(paytime , '%Y-%m-%d'), '%Y-%m-%d')paytime,product_code,money

from test_payment_three

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

14、将表test_payment_three的paytime字段显示为“YYYYMMDD”的字符串格式。

select DATE_FORMAT(paytime , '%Y%m%d')paytime,product_code,money

from test_payment_three

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

15、将表test_payment_three的paytime字段显示为“YYYY-MM-DD HH:MM:SS”的字符串格式。

select DATE_FORMAT(paytime , '%Y-%m-%d %H:%i:%s')paytime,product_code,money

from test_payment_three

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

16、查询表test_payment_three中 “2019-3-1” 以后的数据

select * from test_payment_three

where paytime >=DATE_FORMAT('2019-3-1' , '%Y%m%d')

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

17、查询表test_payment_three中“2019-5-1”至“2019-8-1”之间的数据

select * from test_payment_three where paytime between DATE_FORMAT('2019-5-1' , '%Y%m%d')

and DATE_FORMAT('2019-8-1' , '%Y%m%d')

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

18、将表test_payment_four的paytime字段显示为“YYYY-MM-DD”的字符串格式。

select DATE_FORMAT(paytime , '%Y-%m-%d')paytime,product_code,money

from test_payment_four

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

19、将表test_payment_four的paytime字段显示为“YYYYMMDD”的字符串格式。

select DATE_FORMAT(paytime , '%Y%m%d')paytime,product_code,money

from test_payment_four

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

20、查询表test_payment_four中 “2019-3-1” 以后的数据

select * from test_payment_four where paytime > STR_TO_DATE('2019-3-1', '%Y-%m-%d')

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

21、查询表test_payment_four中“2019-5-1”至“2019-8-1”之间的数据

select * from test_payment_four where paytime between STR_TO_DATE('2019-3-1', '%Y-%m-%d')

and STR_TO_DATE('2019-8-1', '%Y-%m-%d')

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

22、将表test_payment_five的paytime字段显示为“YYYY-MM-DD HH:MM:SS”的字符串格式。

select DATE_FORMAT(paytime, '%Y-%m-%d %H:%i:%s')paytime,product_code,money from test_payment_five

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

23、将表test_payment_five的paytime字段显示为“YYYYMMDD”的字符串格式。

select DATE_FORMAT(paytime, '%Y%m%d')paytime,product_code,money from test_payment_five

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

24、查询表test_payment_five中 “2019-3-1” 以后的数据

select * from test_payment_five where paytime > STR_TO_DATE('2019-3-1', '%Y-%m-%d')

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

25、查询表test_payment_five中“2019-5-1”至“2019-8-1”之间的数据

select * from test_payment_five where paytime between STR_TO_DATE('2019-3-1', '%Y-%m-%d')

and STR_TO_DATE('2019-8-1', '%Y-%m-%d')

e085094f138e?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

四、建表语句及数据插入

create table test_payment(

year varchar(10),

month varchar(10),

day varchar(10),

hour varchar(10),

product_code varchar(30),

money varchar(20)

);

CREATE TABLE test_payment_two (

paytime varchar(20) NULL,

product_code varchar(30) NULL,

money varchar(20) NULL

);

CREATE TABLE test_payment_three (

paytime varchar(20) NULL,

product_code varchar(30) NULL,

money varchar(20) NULL

);

create table test_payment_four(

paytime date,

product_code varchar(30),

money varchar(20)

);

create table test_payment_five(

paytime datetime,

product_code varchar(30),

money varchar(20)

);

insert into test_payment values('2019','1','3','12','M2202','89');

insert into test_payment values('2019','2','4','13','M2201','90');

insert into test_payment values('2019','3','5','14','M2201','91');

insert into test_payment values('2019','4','3','12','M2202','89');

insert into test_payment values('2019','5','4','13','M2201','90');

insert into test_payment values('2019','5','4','16','M2201','99');

insert into test_payment values('2019','6','5','14','M2201','91');

insert into test_payment values('2019','7','5','14','M2201','91');

insert into test_payment values('2019','8','3','12','M2202','89');

insert into test_payment values('2019','8','24','12','M2201','89');

insert into test_payment values('2019','9','4','13','M2201','90');

insert into test_payment_two

select concat_ws(' ',concat_ws('-',year,month,day),hour)paytime,product_code,money

from test_payment;

insert into test_payment_three

SELECT

DATE_FORMAT(STR_TO_DATE(concat_ws('-',year,month,day), '%Y-%m-%d'), '%Y%m%d') paytime,

product_code,money from test_payment;

insert into test_payment_four

SELECT

STR_TO_DATE(concat_ws('-',year,month,day), '%Y-%m-%d') paytime,

product_code,money from test_payment;

insert into test_payment_five

SELECT

STR_TO_DATE(concat(concat_ws('-',year,month,day),' ',hour), '%Y-%m-%d %H:%i:%s') paytime,

product_code,money from test_payment;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值