一、时间类型

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 时间参数 年月日 时分秒 比较大小mysql 时间参数 年月日 比较大小
mysql 时间参数 年月日 时分秒 比较大小
    <select id="checkTimeRepeatNum" parameterType="HomepageAdvertisement" resultType="int">
        SELECT COUNT(*) FROM qs_study_homepage_advertisement WHERE is_valid=1
                                    我们知道,mysql里边,日期类型有很多表现形式,date, datetime,timestamp等类型。考虑这样一种场景:按时间段拉取给定时间段的内容,这时,我们就得使用日期类型的比较了。表结构:tablename_tbl+-----------------+--------------+------+-----+-------------------+----------------+| Fi...
                                    相同显示TIMESTAMP列的显示格式与DATETIME列相同。换句话说,显示宽度固定在19字符,并且格式为YYYY-MM-DD HH:MM:SS。不同范围datetime以'YYYY-MM-DD HH:MM:SS'格式检索和显示DATETIME值。支持的范围为'1000-01-01 00:00:00'到'9999-12-31 23:59:59'TIMESTAMP值不能早于1970或晚于2037储...
                                    比较字符串类型时间大小
数据库时间是varchar类型的,MySql使用CURDATE()来获取当前日期,SqlServer通过GETDATE()来获取当前日期
1. 直接使用字符串来比较
注意:要保证两个数据的类型完全相同,否则异常
比如A:"2016-09-01",如果B数据是:"2016-9-2",那么无法进行比较
2. 通过类型转换函数convert(),
注意:...
                                    假如有个表product有个字段add_time,它的数据类型为datetime,有人可能会这样写sql:代码如下复制代码select* from product where add_time = '2013-01-12'对于这种语句,如果你存储的格式是YY-mm-dd是这样的,那么OK,如果你存储的格式是:2013-01-12 23:23:56这种格式你就悲剧了,这是你就可以使用DATE()函...
                                    我们知道,mysql里边,日期类型有很多表现形式,date, datetime,timestamp等类型。考虑这样一种场景:  按时间段拉取给定时间段的内容,这时,我们就得使用日期类型的比较了。  表结构:tablename_tbl  +-----------------+--------------+------+-----+-------------------+---------------