美文网首页数据蛙数据分析每周作业呆鸟的Python数据分析
Mysql 25道练习题——时间字符串相互转换(工作必备)

Mysql 25道练习题——时间字符串相互转换(工作必备)

作者: 夜希辰 | 来源:发表于2020-08-16 22:23 被阅读0次
    年目标:完成7周入门数据工程师系列文章

    建表语句在文末
    如果你想查看MYSQL时间函数,可以看本篇文章—mysql时间与字符串之间相互转换

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

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

    目录
    一、Mysql中经常用来存储日期的数据类型
    二、工作中常见的时间存储格式
    三、30道时间练习题
    四、建表语句及数据插入

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

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

    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 表名,可以查看表结构
    

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

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

    1、以字符串数据形式存储时间
    问题:不方便时间查询和时间范围筛选

    select  *  from test_payment_two;
    desc test_payment_two;
    
    时间的数据类型为字符串
    2、以字符串数据形式存储时间
    问题:不方便时间查询和时间范围筛选
    select * from test_payment_three;
    desc test_payment_three
    
    时间的数据类型为字符串

    3、时间分别存放在年、月、日、小时4个字段中
    问题:不方便时间查询和时间范围筛选

    时间的数据类型为字符串

    4、时间的数据类型为date
    问题,只能存储年月日,不能存储小时。可以进行时间范围的查找。

    select  *  from test_payment_four;
    desc test_payment_four
    
    时间的数据类型为date
    5、时间的数据类型为datetime
    时间的数据类型为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
    

    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
    
    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'
    

    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'
    

    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
    

    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
    

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

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

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

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

    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
    

    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'
    

    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'
    

    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
    

    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
    

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

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

    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
    

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

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

    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')
    

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

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

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

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

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

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

    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')
    

    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
    

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

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

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

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

    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')
    

    四、建表语句及数据插入

    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;
     
    

    相关文章

      网友评论

        本文标题:Mysql 25道练习题——时间字符串相互转换(工作必备)

        本文链接:https://www.haomeiwen.com/subject/kawtjktx.html