20231008工作心得:sql

1.SQL语句里的if的嵌套使用

if(product ='A' and brand_name ='B','C',if(product ='A' and brand_name !='B','D',product)) as product

if(A,B,C)。SQL里if函数,如果条件A成立,就显示B的值,否则就显示C。

这个代码的意思的:

当该行数据product属性为A,且brand_name属性为B的时候,就用C来作为product列的值。

否则,就进入第二个if判断,当该行数据product属性为A,且brand_name属性不为B的时候,就用D来作为product列的值。否则,就用它原来的product的值。

其实就是3种情况,用if嵌套写出来了。当然,还可以继续嵌套下去。

if(product ='A' and brand_name ='B','C',if(product ='A' and brand_name ='E','D',if(product ='A' and brand_name ='F','G',product))) as product

2. sql语句一定先执行无误,再放到代码里。

不然如果是因为多一个)或者少一个(引起的SQL语法错误,寻找起来是很难的。

3.BeanUtils.batchTransform

可以直接 以list形式批量拷贝。

List personList = personRepository.findAll();
List personDTOList =  BeanUtils.batchTransform(personDTO.class,personList)


4.label.substring(label.lastIndexOf("-")+1);

substring加lastIndexOf,就是截取自某个元素出现后的字符串。

String a = "191-12-23";

System.out.println(a.substring(a.lastIndexOf("-")));

System.out.println(a.substring(a.lastIndexOf("-")+1));

结果:

-23
23

所以一般用的是第二种,可以截取"-"之后的字符串。

5.尤其是在面对相似功能的接口时。思路要清晰。

现在调用的是哪个接口,是在哪个环境,哪一行代码出的问题。不能模糊。

6.这两种写法都可以避免SQL里的NULL

SUM(IF(push_status = 1, 1, 0)) 
IFNULL(SUM(CASE WHEN r.hangup = 'NORMAL_CLEARING' THEN 1 ELSE 0 END),0)。

当没有满足的数据时候,也会有个0,而不会是Null。

20231008工作心得:sql_第1张图片

20231008工作心得:sql_第2张图片

你可能感兴趣的:(sql,数据库)