前情提要
:本篇幅主要针对项目中MySQL语句的写法和处理来写。
一、模糊查询时间类型
1.情景描述:
数据库的时间为 DateTime类型----也就是 :yyyy-MM-dd HH-mm-ss的格式,
而我们在查询的时候一般会用日期来查,例如 2022-09-23
2.产生问题
如 这样写当然是查不出来数据的
SELECT *
FROM t_sep_jsa
WHERE DeleteFlg=0
AND WorkDate='2022-09-23';
# 上一行在项目中我们正常这样写
AND WorkDate=#{date};
3.正确写法-DATE_FORMAT函数
SELECT *
FROM t_sep_jsa
WHERE DeleteFlg=0
AND DATE_FORMAT(WorkDate,'%Y-%m-%d') ='2022-09-23';
1)针对项目实际需求进行优化
SELECT *
FROM t_sep_jsa
WHERE DeleteFlg=0
AND DATE_FORMAT(WorkDate,'%Y-%m-%d') = SUBSTRING('2022-09-23',1,10);
# 很显然在项目里我们要用 #{}来获取,所以应该用下面这种写法替代即可
SELECT *
FROM t_sep_jsa
WHERE DeleteFlg=0
AND DATE_FORMAT(WorkDate,'%Y-%m-%d') = SUBSTRING(#{xxxdate}},1,10);
4.DATE_FORMAT ()函数解析
DATE_FORMAT(参数1,参数2):
··· 参数1:你的实际字段名,看例子也应该可以看出来。
··· 参数2:你的实际字段要被转化成的格式,例如要转化成 ‘年-月-日‘ ,那就像上边例子中那样写,
你也可以写成 ‘%Y-%m’ 年-月
或者: ‘%Y%M%d’ 即没有横杠,,,年月日 的形式,想怎么改就怎么改。
5.SUBSTRING()函数解析
这个函数看名字也知道,是字符串截取。
SUBSTRING(参数1,参数2,参数3)
参数1:要被截取的字段或者字符串。 也就是 #{data}
参数2:截取 参数1 的开始位置, 为1就是从第一个字符串开始截取
参数3:截取 参数1 的结束位置, 他们是个闭区间 【参数1,参数2】
例如:SUBSTRING(‘asdc’,1,3)
就会得到 ‘asd’
二、模糊查询字符串类型MySQL写法
1.情景分析
我们需要在MySQL语句中对传入的参数进行处理,并且使其完成模糊查询的功能。
2.上代码即可
<select id="selectByMap"
resultType="com.pcitc.basic.business.ProductionOperation.ScheduleManagement.ProductionDaily.entity.TScyxDdglScrb">
SELECT
<include refid="Base_Column_List"/>
FROM t_scyx_ddgl_scrb
WHERE DeleteFlg=0
<if test="recordStatus != null and recordStatus !=''">
and RecordStatus = #{recordStatus}
</if>
<if test="fillUser != null and fillUser !=''">
<bind name="fillUser" value="'%'+fillUser+'%'"/>
and FillUser like #{fillUser}
</if>
<if test="productionBeginDate != null and productionBeginDate !=''">
and ProductionBeginDate >= STR_TO_DATE(SUBSTRING(#{productionBeginDate},1,10),'%Y-%m-%d')
</if>
<if test="productionEndDate != null and productionEndDate !=''">
and ProductionEndDate <= STR_TO_DATE(SUBSTRING(#{productionEndDate},1,10),'%Y-%m-%d')
</if>
ORDER BY LastModifiedDateTime DESC,CreatedDateTime DESC
</select>
3.标签详解
<bind name=" “, value=” ">标签用于封装你传入的参数。
属性1:name:即你方法中传入的参数名字:
属性2:value就是你要将这个参数进行怎么样的封装,例如前后加上 % ,实现模糊查询
这个很简单
4.STR_TO_DATE()函数详解
该函数就是将 字符串转换成 DATE 格式,可能会避免一些错误。
该函数和 DATE_FORMAT ()函数一个意思。
希望能够帮助到大家。