文章目录
- 一、时间类
- 1.1 DATE_SUB() 函数
- 1.2 NOW(), CURDATE(), CURTIME(), DATE()函数
- 1.3 实战
- 二、统计类
- 三、字符类
- 3.1 LOCATE()函数
- 3.2 concat()函数
- 3.3 concat_ws()函数
- 3.4 group_concat()函数
- 3.5 repeat()函数
- 3.6 REPLACE()函数
- 四、判断类
- 4.1 case when方法
- 4.2 IFNULL()函数
- 4.3 IF语句
一、时间类
1.1 DATE_SUB() 函数
DATE_SUB() 函数从日期减去指定的时间间隔。参考
常见用法:
- 查询一天前:
select * from table where DATE_SUB(CURDATE(), INTERVAL 1 DAY) <= date(column_time);
- 查询一周前:
select * from table where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(column_time);
- 查询一个月前:
select * from table where DATE_SUB(CURDATE(), INTERVAL 1 MONTH) <= date(column_time);
- 查询一天后:
select * from table where DATE_SUB(CURDATE(), INTERVAL -1 DAY) >= date(column_time);
1.2 NOW(), CURDATE(), CURTIME(), DATE()函数
获取时间
- SELECT NOW(), CURDATE(), CURTIME()
- SELECT DATE(NOW())
1.3 实战
SELECT column_list FROM table_name WHERE expired_date = CURDATE();
如果expired_date列包含日期和时间部分,则应使用DATE()函数仅提取日期部分并将其与当前日期进行比较:
SELECT column_list FROM table_name WHERE DATE(expired_date) = CURDATE();
二、统计类
三、字符类
3.1 LOCATE()函数
-
语法1:LOCATE(substr, str)
返回子串 substr 在字符串 str 的第一个出现的位置(从1开始算)。如果 substr 不在 str 中,则返回值为0 。
SELECT LOCATE('bar', 'foobarbar');
-
语法2:LOCATE(substr, str, pos)
第二个语法返回子符串 substr 在字符串 str ,从 pos 处开始的第一次出现的位置。如果 substr 不在 str 中,则返回值为0。
3.2 concat()函数
语法:concat(str1, str2, …)
返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。
select concat('11','22','33');
select concat('11','22',null);
3.3 concat_ws()函数
语法:contcat_ws(separator,str1,str2,…)
contcat_ws() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。
注意:如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。
select concat_ws(',','11','22','33');
select concat_ws(null ,'11','22','33');
和MySQL中concat函数不同的是, concat_ws函数在执行的时候,不会因为NULL值而返回NULL。
select concat_ws(',','11','22',NULL);
3.4 group_concat()函数
语法:group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’])
以id分组,把name字段的值打印在一行,逗号分隔(默认):
select id,group_concat(name) from aa group by id;
以id分组,把name字段的值打印在一行,分号分隔:
select id,group_concat(name separator ';') from aa group by id;
以id分组,把去冗余的name字段的值打印在一行,逗号分隔:
select id,group_concat(distinct name) from aa group by id;
以id分组,把name字段的值打印在一行,逗号分隔,以name排倒序:
select id,group_concat(name order by name desc) from aa group by id;
3.5 repeat()函数
语法:repeat(str, int)
用来复制字符串,如下’ab’表示要复制的字符串,2表示复制的份数:
select repeat('ab',2);
3.6 REPLACE()函数
语法:REPLACE(str, from_str, to_str)
将str中所有出现的from_str替换为to_str。str可以是字段名。
select *, replace(address,'区','呕') AS rep from test_tb;
四、判断类
4.1 case when方法
统计字段中特定值的数量:
select sum(case when name = "张三" or name = "李四" then 1 when age >= 18 then 1 else 0 end) as NAMSUM from xxx_table;
注意:多个when…then都会执行,结果是取并集,而不是直接累加,也不是只执行其中一个when…then。(如果要严格上的判断,可以用【IF语句】,基本类似编程语言中的if…elseif…else)
4.2 IFNULL()函数
语法:IFNULL(expression_1,expression_2);
如果expression_1不为NULL,则IFNULL函数返回expression_1; 否则返回expression_2的结果。IFNULL函数根据使用的上下文返回字符串或数字。
SELECT IFNULL(1,0);
SELECT IFNULL('',1);
SELECT IFNULL(NULL,'IFNULL function');
4.3 IF语句
如果要返回基于TRUE或FALSE条件的值,而不是NULL,则应使用IF函数。
-
IF语句
IF expression THEN
statements;
END IF;
-
IF ELSE语句
IF expression THEN
statements1;
ELSE
statements2;
END IF;
-
IF ELSEIF ELSE语句
IF expression1 THEN
statements1;
ELSEIF expression2 THEN
statements2;
...
ELSE
statementsx;
END IF;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)