【Java】【SQL】DATE_FORMAT函数详解

打印 上一主题 下一主题

主题 844|帖子 844|积分 2532

在实际应用开发中,使用sql语句也属于开发者的一部分,这次来说说DATE_FORMAT函数。

弁言:实际上在使用Java开发过程中,有很多业务场景下,都有时间类型的参数参与。前后端进行交互的时间,针对时间类型的格式都会做一个业务上的统一,方便开发且增加效率。关于后端的逻辑有两个层面可以进行优化,一个是底层sql方面,一个是业务层方面,这两者之间的处理都可以影响整个业务方法的相应时间。本次分享在sql层面使用DATE_FORMAT 函数 对时间类型数据的处理

1、简朴先容:DATE_FORMAT 是 SQL 中的一个函数,用于将日期或时间格式化为指定的格式,以下是sql情势的格式

  1. DATE_FORMAT(date, format)
复制代码
其中:
date 是要格式化的日期或时间。
format 是你希望得到的输特别式。
举例

  1. SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');
  2. 常见的格式化选项有:
  3. %Y 年份,四位数
  4. %y 年份,两位数
  5. %m 月份,两位数
  6. %d 日期,两位数
  7. %H 小时,24小时制,两位数
  8. %h 小时,12小时制,两位数
  9. %i 分钟,两位数
  10. %s 秒,两位数
  11. %p AM/PM
复制代码
例子中,把时间转化为 年代日格式,和电脑右下角的日期是相同的,那么针对Java中的传参怎么应用呢,以下:

  1. @Data
  2. public class AITimeDatePlay {
  3.         @DateTimeFormat(
  4.                         pattern = "yyyy-MM-dd HH:mm:ss"
  5.         )
  6.         @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
  7.         private Date testTime;
  8. }
复制代码
代码中仅有一个字段,该字段上贴有2个注解,插个题外话,大概表明一下:

@DateTimeFormat :当前端丢给后端时间参数的时间,这个注解就将参数中的时间类型的样式转为我们设置的在该注解中的pattern一样。

@JsonFormat:当后端丢给前端的结果是json模式时(一般都是json),该注解会把后端结果中的时间类型参数转为我们在该注解中设置的pattern 一样。注意:需要添加时区(timezone)

重点是无论怎么丢参数,丢的都是Date类型,现在 使用sql 中 DATE_FORMAT 函数来参与业务

  1. List<EmployeeInfo> queryInfomationByTime(AITimeDatePlay dto);
复制代码
最终查询sql

  1. <select id="queryInfomationByTime" resultType="com.bonade.hrm.foundation.model.EmployeeInfo">
  2.         select *
  3.         from employee_info ei
  4.         where date_format(ei.initiation_time,'%Y-%m-%d') = DATE_FORMAT(#{testTime},'%Y-%m-%d')
  5.     </select>
复制代码
也可以当作字段返回,如下:

  1. select date_format(ei.initiation_time,'%Y-%m-%d') as bigTime
  2.         from employee_info ei
  3.         where date_format(ei.initiation_time,'%Y-%m-%d') = DATE_FORMAT(#{testTime},'%Y-%m-%d')
复制代码
也可以按照需求,只准确到年代

  1. select date_format(ei.initiation_time,'%Y-%m') as bigTime
  2.         from employee_info ei
  3.         where date_format(ei.initiation_time,'%Y-%m') = DATE_FORMAT(#{testTime},'%Y-%m')
复制代码
也可以输入首、尾时间,取数据库中某个时间单元是否在输入的时间段之中

  1. select date_format(ei.initiation_time,'%Y-%m') as bigTime
  2.         from employee_info ei
  3.         where (
  4.             ((DATE_FORMAT( ei.initiation_time, '%Y-%m' )) BETWEEN  #{startTime} AND #{endTime})
  5.             OR (( DATE_FORMAT( ei.leave_time, '%Y-%m' )) BETWEEN  #{startTime} AND #{endTime})
  6.             )
复制代码
startTime 为传入的开始时间参数,endTime 为传入的竣事时间参数,这二者之间的时间段可以作为一个筛选条件,若该二者时间格式也需要调解,那么如下:

  1. select date_format(ei.initiation_time,'%Y-%m') as bigTime
  2.         from employee_info ei
  3.         where (
  4.             ((DATE_FORMAT( ei.initiation_time, '%Y-%m' )) BETWEEN  DATE_FORMAT(#{startTime},'%Y-%m') AND DATE_FORMAT(#{endTime},'%Y-%m'))
  5.             OR (( DATE_FORMAT( ei.leave_time, '%Y-%m' )) BETWEEN  DATE_FORMAT(#{startTime},'%Y-%m') AND DATE_FORMAT(#{endTime},'%Y-%m'))
  6.             )
复制代码
以上则是分享的DATE_FORMAT函数的简朴使用。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

乌市泽哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表