SQL语句小tips(持续更新)

统计非法数据

判断people_id是否是32为字母组成的,统计不满足要求的数据

SELECT COUNT(IF(BINARY people_id NOT REGEXP '^[0-9a-z]{32}',TRUE,NULL)) AS people_id_illegality_cnt FROM people_day

if 表达式

IF( expr1 , expr2 , expr3 )

expr1 的值为 TRUE,则返回值为 expr2 
expr1 的值为FALSE,则返回值为 expr3

其中TRUE,select出来是1

BINARY

where条件加入BINARY的话,可以对大小写敏感,默认mysql是不区分大小写的 

mysql是通过lower_case_table_names参数来控制大小写敏感的

非空判断,如果为空置为0,非空取当前值

两种方法:

1. 利用if+isnull判断是否为空

select if(ISNULL(sum(final_amount)),0,sum(final_amount)) as final_amount_total from day_income where day=20180821 and income_type=1;

2 . 利用COALESCE函数

COALESCE(value1,...) :返回第一个非NULL的参数

  说明:返回列表中第一个非空值,如果没有非NULL值,则返回NULL。

  

mysql> SELECT COALESCE(NULL,1);
        -> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
        -> NULL
select COALESCE(sum(final_amount),0)  as final_amount_total from day_income where day=20180822 and income_type=1;

where语句里使用if判断。好难,感觉不好

SELECT COUNT(1)
FROM test_tabel
WHERE month = (
    SELECT CASE 1
            WHEN DAY(CURDATE()) > 5 THEN date_format(curdate(), '%Y-%m')
            ELSE date_format(date_sub(curdate(), INTERVAL 1 MONTH), '%Y-%m')
        END AS correctMonth
);

find_in_set

在数组的strlist是否存在,如字段ad_type为text,内容为1,2,3,4,5 判断3在不在里面

select * from campaign_plan where find_in_set('3',ad_type);
原文地址:https://www.cnblogs.com/jwentest/p/9507083.html