mysql中时间的比较方法
在mysql对数据的搜索中一定遇到过对时间的搜索。使用较多的有 <,>,<=,>=,between and。在搜索的过程中我们可以发现,对于在日期类型为DATE,DATETIME,TIMESTAMP,TIME的字符串进行比较的时候,我们比较的字符串无论是:
SELECT * from customer WHERE create_time < ‘2022-02-13’;
SELECT * from customer WHERE create_time < ‘2022#02#13’;
SELECT * from customer WHERE create_time < ‘20220213’;
都可以搜索出同样的数据结果。这是因为对这些类型进行比较的时候对字符串的格式要求不严格,比较的字符串可以选择任何格式的分割符进行比较。
获取当前时间
在进行比较的时候有时候会有种业务场景是要求获取当前时间,常用的有三类:
- 获取当前时间(日期+时间)
SELECT now();
SELECT sysdate();
SELECT CURRENT_TIMESTAMP();
前两函数获取的时间是datetime类型,而后一种获取的是时间戳。
- 获取当前日期(日期)
SELECT CURRENT_DATE();
获取的类型是date
- 获取当前时间(时间)
SELECT CURRENT_TIME();
获取的时间类型是time
Java中时间的比较方法
在Java中时间的比较方式就更多了,除了前面讲的mysql中的方法也是适用外还有mybatis提供的gt、ge、lt、le和Date()自带的after()、before()还有String提供的compareTo()都可由用于时间的比较。
gt、ge、lt、le
方法 | 作用 |
---|---|
gt | 大于> |
ge | 大于等于> |
lt | 小于< |
le | 小于等于<= |
这些方法不仅仅只是用于时间的比较,他们还可以用于数量大小的比较。
after()和before()
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String beginTime="2022-07-09 10:22:22";
String endTime="2022-07-31 11:22:22";
Date beginDate=sdf.parse(beginTime);
Date endDate=sdf.parse(endTime);
System.out.println(beginDate.before(endDate));
System.out.println(beginDate.after(endDate));
compareTo()
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String beginTime="2022-07-09 10:22:22";
String endTime="2022-07-31 11:22:22";
Integer i=beginTime.compareTo(endTime);
System.out.println(i);
beginTime比endTime小时会返回负数,相反就返回正数,相等返回0。