mysql中的时间类型和比较大小

mysql中的时间类型和比较大小

    • 一、时间类型
    • 二、时间比较

一、时间类型

mysql有五大时间类型:

  1. datetime 可以存储年月日时分秒类型的时间,如果在设计字段的时候可以设置获取当前时间,插入数据的时候,如果没有对该赋值,mysql会自动获取当前的时间填充

  2. timestamp 可以存储年月日时分秒类型的时间,跟 datetime 一样,也可以存储时间戳,timestamp 的精度是14位,存储也是14位,但是如果设置了自己需要的精度,那么 mysql 会将14位处理成设置的精度进行显示,底层存储仍然是14位精度。timestamp 有一个比较有趣的字段,受当前时区的影响。如果某条记录的字段被修改(不包括datestamp字段),那么 datestamp 字段可以自动更新为数据修改的时间,所以也可以用来代替 updated_time 字段(我习惯用 updated_time 字段名来记录某条数据被修改的时间,方便查看)

在创建新记录和修改某条记录的时候都对该类型的字段更新为当前时间:
...... TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

在创建新记录的时候把这个类型的字段设置为当前时间,当以后修改的时候,不再更新:
..... TIMESTAMP DEFAULT CURRENT_TIMESTAMP

在创建新记录的时候把这个字段设置为0,以后修改的时候更新该字段:
..... TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

在创建新记录的时候把这个类型的字段字段设置为给定值,以后修改的时候也会更新该字段:
..... TIMESTAMP DEFAULT ‘yyyy-mm-dd hh:mm:ss' ON UPDATE CURRENT_TIMESTAMP
  1. date 可以存储年月日时间

  2. time 可以存储时分秒时间

  3. year 可以存储年份

二、时间比较

java中的常用的 Date 类本身提供了 before, after方法比较时间的先后,mysql中时间的比较灵活,可以直接使用 <、>、= 进行比较,适应所有时间字段,但是格式需要相同,也可以使用 between and 来进行比较。

还有一个比较灵活的,之前工作中,有这么个场景,有一个时间字段在 java 是String 类型,需要作为参数到 sql 语句中和时间类型的字段比较,一般我都是使用 MySQL 自带的 str_to_date(str, format) 函数将字符串先转化为时间类型再比较,后来发现其实时间类型的字段可以和字符串类型的字段直接进行比较,不用转为相同类型,省去了转化的时间,当然时间格式也要一样。

timestamp类型的时间比较
SELECT * FROM `timetest` where timestamptest = '2021-08-29 11:54:22'

datetime类型的时间比较
select * from test where datetimetest = '2021-08-29 11:54:22'

time类型的时间比较
SELECT * FROM `timetest` where timetest = '11:54:22'

date类型的时间比较
SELECT * FROM `timetest` where datetest = '2021-08-29'

year类型的时间比较
SELECT * FROM `timetest` where yeartest = '2021'

你可能感兴趣的:(mysql,mysql,数据库,sql,java)