记录:mysql的日常获取

正常where IN 字符串的时候会有问题
但是我们经常会有一个字段中存了好几个甚至一堆的值 ,例如 字段IDes(字符串类型)里面存了100,200,300,400
此时 FIND_IN_SET 就能解决我们这个棘手的问题了

用法如下

SELECT A.Name FROM `t_personal` A WHERE FIND_IN_SET( A.ID , '1,2,3,4,5')
 
SELECT * FROM test_0 where find_in_set('女',t_sex);

查询t_personal表中ID等于 1,2,3,4,5的数据
sql 为空不做查询条件

select * from usertable where 1=1 and (name=@name or @name='') and (page=@page or @page='')

插入数据没有返回主键id

<insert id="add" parameterType="EStudent" useGeneratedKeys="true" keyProperty="id">
  insert into TStudent(name, age) values(#{name}, #{age})
</insert>

设置null 为0

SELECT COALESCE(NULL, …一长串NULL…,NULL, 0);

返回值0

分组条件:

select  ocsp.ocsp_code,ocsp.ocs_id from order_contract_stockup_purchase 
ocsp GROUP BY ocsp.ocsp_code,ocsp.ocs_id

查询重复数据只去一条数据:DISTINCT

处理null字段: SELECT IF(AVG(字段) IS NULL,0, 字段) as 重命名 From xxx

处理时间:DATE_FORMAT( sas.create_date, ‘%Y-%m-%d’ )

if语句判断传入参数是否存在

<if test="dbName != null and dbName != ''">
       and d.name like #{dbName}
     </if>

MySQL 获得当前日期时间 函数
获得当前日期+时间(date + time)函数:now()

Mysql语句模糊查询字符串:

like concat('%',@word,'%')

MySQL对sum()字段 进行条件筛选,使用having,不能用where

SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
HAVING SUM(area)>1000000

在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。
相反,having子句可以让我们筛选成组后的各组数据

AND DATE_FORMAT( ocs.create_date, '%Y-%m-%d %H:%i:%S' ) 
BETWEEN #{criteriaVo.value} AND #{criteriaVo.endValue}

AND DATE_FORMAT( ocs.create_date, '%Y-%m-%d' ) 
BETWEEN #{criteriaVo.value} AND DATE_ADD(#{criteriaVo.endValue},INTERVAL 1 DAY)

BETWEEN DATE_FORMAT(#{criteriaVo.value},'%y-%m-%d %H:%i') 
and DATE_ADD(DATE_FORMAT(#{criteriaVo.endValue},'%y-%m-%d %H:%i'),INTERVAL 1 MINUTE)

and so.pick_date BETWEEN DATE_FORMAT(#{criteriaVo.value},'%y-%m-%d') 
and DATE_ADD(DATE_FORMAT(#{criteriaVo.endValue},'%y-%m-%d'),INTERVAL 1 DAY)

AND pcb.pcb_number like concat('%',#{criteriaVo.value},'%')
<if test="criteriaVo.column == 'purchaseTotal'">
    <if test="criteriaVo.expression == 'eq'">
        and pcb.purchase_total = #{criteriaVo.value}
    </if>
    <if test="criteriaVo.expression == 'gt'">
        and pcb.purchase_total > #{criteriaVo.value}
    </if>
    <if test="criteriaVo.expression == 'ge'">
        and <![CDATA[pcb.purchase_total >= #{criteriaVo.value}]]>
    </if>
    <if test="criteriaVo.expression == 'lt'">
        and <![CDATA[pcb.purchase_total < #{criteriaVo.value}]]>
    </if>
    <if test="criteriaVo.expression == 'le'">
        and <![CDATA[pcb.purchase_total <= #{criteriaVo.value}]]>
    </if>
</if>

截取首字母:
这里有一个明显的边缘情况,如果休假名称应包含两个以上的术语,则应该发生这种情况.我假设您只需要前两个单词的缩写,而不管出现多少个.

SELECT
    CASE WHEN INSTR(leave_name, ' ') > 0 THEN
         CONCAT(LEFT(leave_name, 1),
                SUBSTRING(leave_name, INSTR(leave_name, ' ') + 1, 1))
         ELSE LEFT(leave_name, 1) END AS initials
FROM yourTable;

当只出现一个单词时,我还增加了一个边缘情况的覆盖范围.在这种情况下,我们只取单词的首字母.
定位排序的行数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值