在實際應(yīng)用開發(fā)中,使用sql語句也屬于開發(fā)者的一部分,這次來說說DATE_FORMAT函數(shù)。
引言:實際上在使用Java開發(fā)過程中,有很多業(yè)務(wù)場景下,都有時間類型的參數(shù)參與。前后端進(jìn)行交互的時候,針對時間類型的格式都會做一個業(yè)務(wù)上的統(tǒng)一,方便開發(fā)且增加效率。關(guān)于后端的邏輯有兩個層面可以進(jìn)行優(yōu)化,一個是底層sql方面,一個是業(yè)務(wù)層方面,這兩者之間的處理都可以影響整個業(yè)務(wù)方法的響應(yīng)時間。本次分享在sql層面使用DATE_FORMAT 函數(shù) 對時間類型數(shù)據(jù)的處理
1、簡單介紹:DATE_FORMAT 是 SQL 中的一個函數(shù),用于將日期或時間格式化為指定的格式,以下是sql形式的格式
DATE_FORMAT(date, format)
其中:
date 是要格式化的日期或時間。
format 是你希望得到的輸出格式。文章來源地址http://www.zghlxwxcb.cn/news/detail-840710.html
舉例
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');
常見的格式化選項有:
%Y 年份,四位數(shù)
%y 年份,兩位數(shù)
%m 月份,兩位數(shù)
%d 日期,兩位數(shù)
%H 小時,24小時制,兩位數(shù)
%h 小時,12小時制,兩位數(shù)
%i 分鐘,兩位數(shù)
%s 秒,兩位數(shù)
%p AM/PM
例子中,把時間轉(zhuǎn)化為 年月日格式,和電腦右下角的日期是相同的,那么針對Java中的傳參怎么應(yīng)用呢,以下:
@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 :當(dāng)前端丟給后端時間參數(shù)的時候,這個注解就將參數(shù)中的時間類型的樣式轉(zhuǎn)為我們設(shè)置的在該注解中的pattern一樣。
@JsonFormat:當(dāng)后端丟給前端的結(jié)果是json模式時(一般都是json),該注解會把后端結(jié)果中的時間類型參數(shù)轉(zhuǎn)為我們在該注解中設(shè)置的pattern 一樣。注意:需要添加時區(qū)(timezone)
重點是無論怎么丟參數(shù),丟的都是Date類型,現(xiàn)在 使用sql 中 DATE_FORMAT 函數(shù)來參與業(yè)務(wù)
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>
也可以當(dāng)作字段返回,如下:
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')
也可以輸入首、尾時間,取數(shù)據(jù)庫中某個時間單位是否在輸入的時間段之中
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 為傳入的開始時間參數(shù),endTime 為傳入的結(jié)束時間參數(shù),這二者之間的時間段可以作為一個篩選條件,若該二者時間格式也需要調(diào)整,那么如下:
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函數(shù)的簡單使用。
文章來源:http://www.zghlxwxcb.cn/news/detail-840710.html
到了這里,關(guān)于【Java】【SQL】DATE_FORMAT函數(shù)詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!