工作中mysql的一些复杂操作的记录

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


提示:这里可以添加本文要记录的大概内容:

工作中一些mysql语法稍微难点的用法记录。


提示:以下是本篇文章正文内容,下面案例可供参考

一、select in (select)。in条件后面连接子查询

SELECT
	comm.stc_id AS ID,
	comm.stc_user_id AS commentUserId,
	USER.weu_alias AS commentUsername,
	USER.weu_avatar AS commentUserAvatar,
	comm.stc_content AS comments,
	timestampdiff( MINUTE, comm.stc_datetime, now( ) ) AS commentTime,
	comm.stc_target AS target,
	comm.stc_target_id AS targetId
FROM
	staff_comments comm
	LEFT JOIN wecom_user USER ON comm.stc_user_id = USER.weu_userid 
WHERE
	comm.stc_target_id IN ( 1, ( SELECT stc_id FROM ( SELECT stc_id FROM staff_comments WHERE stc_target_id = 1 ) AS tab ) )

结果:
在这里插入图片描述
分析:

一、replace() 函数

场景如下:今天要从数据库查询一个yyyy-MM-dd HH:mm:ss格式的日期。
在这里插入图片描述2022-08-21T14:44:54,这个值怎么多了个T?这肯定要不得,咋办?
思路一:业务层拿到值,用String的split()方法根据T拆分,然后拼接。太麻烦了,不愿意。
思路二:使用Mybatis的replace()方法,将T替换成" "这样的空串。
在这里插入图片描述替换成功。sql语法如下:

SELECT 
            spl_total AS total,
            replace(spl_datetime,"T", "") AS datetime,
            spl_point AS point,
            spl_description AS description,
            spl_type AS type
        FROM 
            staff_points_list 
        <where>
            spl_user_id = #{userId} 
            <if test="type == 2">
                AND spl_point &gt; 0
            </if>
            <if test="type == 3">
                AND spl_point &lt; 0
            </if>
        </where>
        ORDER BY spl_datetime DESC

分析replace(参数一,参数二,参数三):
参数一:表示要操作的字段名称,
参数二:表示要将哪个值或者哪个字替换掉
参数三:表示替换成什么值。
PS:AND spl_point > 0 和 AND spl_point < 0 看到这两句有点懵?其实一开始我是写成这样的:AND spl_point > 0 和 AND spl_point < 0。什么原理我也不清楚,反正就是要转义。所以:
&gt; 表示 >
&lt; 表示 <


总结

持续更新。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值