• 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);
  • 相关阅读:
    Thinking in Java
    Interview Common Sample Codes
    Longest Common Substring
    Mac键盘按键符号
    ElasticSearch
    Variables and Arithmetic Expression
    Associative Containers
    Container Adaptors
    string Type
    初识 tk.mybatis.mapper 通用mapper
  • 原文地址:https://www.cnblogs.com/jwentest/p/9507083.html
Copyright © 2020-2023  润新知