JAVA用到MySQL(一)--- Date、CASE WHEN、IFNULL、foreach、字符串排序

Date/Datetime

数据库的表:Date类型字段,保存年月日,而Datetime类型字段,保存的是年-月-日 时:分:秒。

对应的entity实体类:Date和Datetime在实体类中都用Date修饰。

在SQL语句中需用DATE_FORMAT修饰:

SELECT 
    id, DATE_FORMAT(created_at, '%Y-%m-%d %H:%i:%s') createdAt
FROM user;

其中日期格式 '%Y-%m-%d %H:%i:%s' 分别对应着年-月-日 时:分:秒


CASE WHEN...THEN...ELSE...END

case when...then...else...end是mysql语句中的if...else(或switch case ),具体用法为:

SELECT
    (CASE WHEN name IS NULL THEN 1 ELSE 0 END) ifNull
FROM user;

上述语句意义为:当user表中name为null时,查询的ifNull值赋为1,否则赋值为0。

当然也支持更多的情况:

SELECT
    (CASE name 
        WHEN 'Bob' THEN 'B'
        WHEN 'Jack' THEN 'J'
        WHEN 'Alice' THEN 'A'
        ELSE 'C'
     END
    ) shortName
FROM user;

IFNULL

ifnull(xxx, yyy),意义是如果括号中xxx为null则返回yyy,否则返回xxx,具体用法:

SELECT 
    IFNULL(score,0) score
FROM user;

上述sql含义为,查询用户表中的score,若score为null则score为0,否则返回查询到的score。


<foreach>标签

sql查询,经常遇到类似 where id in(1,2,3,4)的情况,当括号里的是参数时,可用<foreach>标签解决:

SELECT 
    id, name, age, score
FROM user
WHERE 1 = 1
<if test="idArr != null">
    AND id IN
    <foreach item="item" index="index" collection="idArr" open="(" separator="," close=")">
        #{item}
    </foreach>
</if>

字符串排序

假设user表中,有字段rank,其值分布为t1,t2,t11,t12,t20,若仅用ORDER BY排序,则:

SELECT 
    id,name,rank
FROM user
ORDER BY rank;

返回结果:

idnamerank
1Bobt1
3Jackt11
4Alicet12
2Funcht2
5Bluet20

因为字符串排序是先比较字符串第一个字符的大小,再依次比较下一个字符,而不是像int型比较整个数字的大小。

要想让字符串数据排序达到数字类型字段排序的效果,可以采用如下三种方式:

SELECT 
    id,name,rank
FROM user
ORDER BY rank*1;
SELECT 
    id,name,rank
FROM user
ORDER BY rank+0;
SELECT 
    id,name,rank
FROM user
ORDER BY CAST(rank AS DECIMAL);

返回结果:

idnamerank
1Bobt1
3Funcht2
4Jackt11
2Alicet12
5Bluet20

Java用到的MySQL(二)--- CONCAT()、CONCAT_WS()、GROUP_CONCAT()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值