idea中几个常用的sql语句

idea中的xml文件中几个常用的sql语句

1,模糊搜索

<if test="keyword != null and keyword != ''">  
AND “你的变量” LIKE CONCAT('%',#{包含的值},'%') </if>
 
2,正则判断字符串获取最大值
 
SELECT
max(r.number)
FROM
表名 r
WHERE
r.is_deleted = '0'
AND (r.number REGEXP '[^0-9.]') = 0
AND length(r.number) = 10
 
3,分组排序
select a.reporting_id,count(*) from 表名 a group by a.reporting_id order by count(*) desc;
select a.number,count(*) from 表名 a group by a.number order by count(*) desc;
 
4,简单的查表
可能是根据id获取:
model名字  secret = baseInfoService.getModelById(dto的名字.getReportingSecretId());
然后直接只用即可,我把他们放到了一个map了
lindkedOneMap.put("secret", secret == null?"":secret.getName());
 
也可能是根据modle获取:
new一个,赋值,把modle放进去
model名字  sysCode = new model名字();
sysCode.setCode(DTO名字 .getReportingMethodCode()); 
sysCode.setDeleted(false);
sysCode = sysCodeService.getModelByModel(sysCode);
 
5,增加一个特殊条件
从1到17位,包含 XXX 的:
 
AND 'XXX ' = SUBSTR(获取的字段名  FROM 1 FOR 17)
 
6,按照时间段查找
10到20天的
DATE_SUB(CURDATE(), INTERVAL 20 DAY) <= sc.process_time
    AND DATE_SUB(CURDATE(), INTERVAL 10 DAY) >= sc.process_time
 
7,使用union时
(1)两个或者多个联合是,查找的字段要一致
(2)如果需要求和,需要调用函数 SUM(s.count),里面的就是需要求和的字段。
 
8,group by
就是对查出的数据进行分组,如果需要进行求和的话。需要增加函数count。
 
9 ,count() 和 sum() 的区别
count()是算行数的,sum是求和的
(1)count()是求一列中有多少行。通常和group by一起使用
(2)sum是求和,把一列中的数字相加。注意的是,这一列必须都是数字,否则无法相加。
10,间隔时间的选择
 (1)A-B 的时间为  10-20   (2)我们的时间为三种:1-11,11-12,12-21,1-30  交叉时间。
无论是那种时间:(2)下面的开始时间<(1)的结束时间   and (2)的结束时间>(1)的开始时间
11,截取字符串
select left(字段,8),right(字段,4) from 表  left表示从左边截取,里面的8表示到第几位。right反之
12,查询时把某个字段结合,以“,”分开
SELECT
    pro.problem_code                                 proCode,
    GROUP_CONCAT(rep.reporting_id)      reportingIds,  
    COUNT(0)                                              amount
FROM
    表名 rep
INNER JOIN 表名 pro ON  条件
AND 条件
GROUP BY
字段
 
主要用到的方法:  GROUP_CONCAT(rep.reporting_id) ,就是把rep.reporting_id以都要结合在一起
 
注释:如果需要去重的时候,可以加上 distinct     GROUP_CONCAT(distinct  lev.reportingIds) reportingIds
就可以把里面重复的数据去掉。
13,把三行转成一行
SELECT
    a.reporting_id,
    max(case b.problem_code when '字段名1' then b.problem_code else '' end) as probemcode1,
    max(case b.problem_code when '字段名2' then b.problem_code else '' end) as probemcode2,
    max(case b.problem_code when '字段名3' then b.problem_code else '' end) as probemcode3
FROM
    表名 a
    LEFT JOIN 表名 b on a.reporting_id = b.reporting_id
WHERE
    a.reporting_id = '71f30da545a943e7a23803461514b399'
 
group by a.reporting_id
 
正常来说,如果不加聚合函数,那么显示的只有一条数据。如果不加 group by 那么显示三条。达不到预期的效果。加了聚合函数。就能把三行变成一行。
 
14,根据时间判断是第几季度
select QUARTER('2019.09.02') from dual;
15, 字符串截取之 substring_index
substring_index(str,delim,count)
      str:要处理的字符串
      delim:分隔符
      count:计数
例子:str= www.wikibt.com
      substring_index(str,'.',1)
      结果是:www
      substring_index(str,'.',2)
      结果是: www.wikibt
      也就是说,如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容
      相反,如果是负数,那么就是从右边开始数,第N个分隔符右边的所有内容,如:
      substring_index(str,'.',-2)
      结果为: wikibt.com
     有人会问,如果我要中间的的wikibt怎么办?
     很简单的,两个方向:
      从右数第二个分隔符的右边全部,再从左数的第一个分隔符的左边:
  substring_index(substring_index(str,'.',-2),'.',1);
 
16,某一个字段是否包含一个字段
select * from
表名a
where
instr(a.problem_code,'字段名') > 0
发布了95 篇原创文章 · 获赞 17 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_30299243/article/details/103213215