java开发之SQL语句中DATE_FORMAT函数举例详解

 更新时间:2024年05月22日 09:29:47   作者:量子矩阵是实现触碰四维空间基本算法  
要将日期值格式化为特定格式,请使用DATE_FORMAT函数,下面这篇文章主要给大家介绍了关于java开发之SQL语句中DATE_FORMAT函数的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

引言:

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

1、简单介绍:

DATE_FORMAT 是 SQL 中的一个函数,用于将日期或时间格式化为指定的格式,以下是sql形式的格式

DATE_FORMAT(date, format)

其中:

  • date 是要格式化的日期或时间。
  • format 是你希望得到的输出格式。

2、举例

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');

常见的格式化选项有:

%Y 年份,四位数
%y 年份,两位数
%m 月份,两位数
%d 日期,两位数
%H 小时,24小时制,两位数
%h 小时,12小时制,两位数
%i 分钟,两位数
%s 秒,两位数
%p AM/PM

例子中,把时间转化为 年月日格式,和电脑右下角的日期是相同的,那么针对Java中的传参怎么应用呢,以下:

@Data
public class AITimeDatePlay {

	@DateTimeFormat(
			pattern = "yyyy-MM-dd HH:mm:ss"
	)
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
	private Date testTime;
}

代码中仅有一个字段,该字段上贴有2个注解,插个题外话,大概解释一下:

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

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

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

List<EmployeeInfo> queryInfomationByTime(AITimeDatePlay dto);

最终查询sql

<select id="queryInfomationByTime" resultType="com.bonade.hrm.foundation.model.EmployeeInfo">
        select *
        from employee_info ei
        where date_format(ei.initiation_time,'%Y-%m-%d') = DATE_FORMAT(#{testTime},'%Y-%m-%d')
    </select>

也可以当作字段返回,如下:

select date_format(ei.initiation_time,'%Y-%m-%d') as bigTime
        from employee_info ei
        where date_format(ei.initiation_time,'%Y-%m-%d') = DATE_FORMAT(#{testTime},'%Y-%m-%d')

也可以按照需求,只精确到年月

select date_format(ei.initiation_time,'%Y-%m') as bigTime
        from employee_info ei
        where date_format(ei.initiation_time,'%Y-%m') = DATE_FORMAT(#{testTime},'%Y-%m')

也可以输入首、尾时间,取数据库中某个时间单位是否在输入的时间段之中

select date_format(ei.initiation_time,'%Y-%m') as bigTime
        from employee_info ei
        where (
            ((DATE_FORMAT( ei.initiation_time, '%Y-%m' )) BETWEEN  #{startTime} AND #{endTime})
            OR (( DATE_FORMAT( ei.leave_time, '%Y-%m' )) BETWEEN  #{startTime} AND #{endTime})
            )

startTime 为传入的开始时间参数,endTime 为传入的结束时间参数,这二者之间的时间段可以作为一个筛选条件,若该二者时间格式也需要调整,那么如下:

select date_format(ei.initiation_time,'%Y-%m') as bigTime
        from employee_info ei
        where (
            ((DATE_FORMAT( ei.initiation_time, '%Y-%m' )) BETWEEN  DATE_FORMAT(#{startTime},'%Y-%m') AND DATE_FORMAT(#{endTime},'%Y-%m'))
            OR (( DATE_FORMAT( ei.leave_time, '%Y-%m' )) BETWEEN  DATE_FORMAT(#{startTime},'%Y-%m') AND DATE_FORMAT(#{endTime},'%Y-%m'))
            )

以上则是分享的DATE_FORMAT函数的简单使用。

附:计算输入的日期的差值

SimpleDateFormat date = new SimpleDateFormat("yyyy年MM月dd日");
        Date date1 = new Date();

        Date date2 = date.parse("2020年1月1日");
        System.out.println((date1.getTime()-date2.getTime())/1000/3600/24+"天");

结果:我目前的时间距离2020年1月1日有223天。

注意:这里可能存在1天的误差。

总结

到此这篇关于java开发之SQL语句中DATE_FORMAT函数举例详解的文章就介绍到这了,更多相关SQL DATE_FORMAT函数详解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java对Excel表格的上传和下载处理方法

    Java对Excel表格的上传和下载处理方法

    这篇文章主要介绍了Java对Excel表格的上传和下载处理方法,需要的朋友可以参考下
    2017-08-08
  • JavaWeb中的组件Filter过滤器解析

    JavaWeb中的组件Filter过滤器解析

    这篇文章主要介绍了JavaWeb中的组件Filter过滤器解析,Filter过滤器是一种用于处理和转换数据的工具,常用于Web开发中,它可以在请求到达服务器之前或响应返回给客户端之前对数据进行预处理或后处理,需要的朋友可以参考下
    2023-10-10
  • 全面探究 Java 内部类

    全面探究 Java 内部类

    说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉。原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法。今天我们就来一探究竟
    2021-09-09
  • Spring Cache手动清理Redis缓存

    Spring Cache手动清理Redis缓存

    这篇文章主要介绍了Spring Cache手动清理Redis缓存,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Java中double保留两位小数的多种方法

    Java中double保留两位小数的多种方法

    这篇文章主要给大家介绍了关于Java中double保留两位小数的多种方法,对于double数据类型进行计算发生的精度丢失的情况,可以按照自己的需求选择任意方式,需要的朋友可以参考下
    2023-07-07
  • 如何通过Java添加水印到Word文档

    如何通过Java添加水印到Word文档

    这篇文章主要介绍了如何通过Java添加水印到Word文档,水印是一种常用于各种文档的声明、防伪手段,一般可设置文字水印或者加载图片作为水印。以下内容将分享通过Java编程给Word文档添加水印效果的方法,需要的朋友可以参考下
    2019-07-07
  • 详解Spring Security中的HttpBasic登录验证模式

    详解Spring Security中的HttpBasic登录验证模式

    HttpBasic登录验证模式是Spring Security实现登录验证最简单的一种方式,也可以说是最简陋的一种方式,这篇文章主要介绍了Spring Security的HttpBasic登录验证模式,需要的朋友可以参考下
    2019-11-11
  • Java中的日期时间类实例详解(Date、Calendar、DateFormat)

    Java中的日期时间类实例详解(Date、Calendar、DateFormat)

    在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理,这篇文章主要介绍了Java中的日期时间类详解(Date、Calendar、DateFormat),需要的朋友可以参考下
    2023-11-11
  • Java实现文本编译器

    Java实现文本编译器

    这篇文章主要为大家详细介绍了Java实现文本编译器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • java正则表达式之Pattern与Matcher类详解

    java正则表达式之Pattern与Matcher类详解

    这篇文章主要给大家介绍了关于java正则表达式之Pattern与Matcher类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论