字段去重distinct
语法格式:
select
distinct expression[,expression...]
from
tables
[where conditions];
注意事项:
- distinct要放在所有字段的前面
- 如果去重的字段大于一个,则会进行组合去重,只有多个字段组合起来相同时才会被去重
详见:MySQL 数据库去重
日期和时间处理
DATE_FORMAT函数
使用DATE_FORMAT
函数进行时间格式化,常用格式:
%Y
:年(4位,如:2023)%m
:月,数值(00-12)%d
:月的天,数值(00-31)
DATE_SUB和SUBDATE函数
DATE_SUB
函数从DATE或DATETIME值中减去时间值(或间隔),语法:DATE_SUB(start_date, INTERVAL expr unit)
。DATE_SUB
函数接受三个参数:
- start_date:是DATE或DATETIME的起始值
- expr:是一个字符串,用于确定从起始日期减去的间隔值
- unit:是expr可解析的间隔单位,例如DAY,HOUR等
SUBDATE
函数从日期中减去时间/日期间隔,然后返回日期,语法:SUBDATE(date, INTERVAL expr unit)
SUBDATE
函数接受以下三个参数:
- date:第一个指定的日期
- expr:要减去的时间/日期间隔的值
- unit:是expr可解析的间隔单位,例如DAY,HOUR等
# 求昨天的日期值:将今天的日期值减去 1 天
mysql> SELECT DATE_SUB(curdate(),INTERVAL 1 DAY);
+------------------------------------+
| DATE_SUB(curdate(),INTERVAL 1 DAY) |
+------------------------------------+
| 2023-10-28 |
+------------------------------------+
1 row in set (0.00 sec)
# 查询上个月
mysql> select date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH),'%Y-%m') as LAST_MONTH;
+------------+
| LAST_MONTH |
+------------+
| 2023-10 |
+------------+
1 row in set (0.00 sec)
详见:
MySQL date_sub()函数
mysql时间相减获取秒值
DAYOFWEEK和WEEKDAY函数
DAYOFWEEK
函数返回日期的工作日索引值,即星期日为1,星期一为2,星期六为7,这些索引值对应于ODBC标准。DAYOFWEEK
函数的语法:DAYOFWEEK(date)
。DAYOFWEEK
函数接受1个参数,即DATE或DATETIME值。 它返回一个整数,范围从1到7,表示星期日到星期六。WEEKDAY
函数接受1个参数,即DATE或DATETIME值,它返回一个整数,范围从0到6,表示星期一到星期日。
# 查询指定日期对应的星期名称和数字
mysql> SELECT DAYNAME('2023-10-29'), DAYOFWEEK('2023-10-29');
+-----------------------+-------------------------+
| DAYNAME('2023-10-29') | DAYOFWEEK('2023-10-29') |
+-----------------------+-------------------------+
| Sunday | 1 |
+-----------------------+-------------------------+
1 row in set (0.00 sec)
# 查询上周一日期
mysql> select DATE_SUB(DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), INTERVAL 1 WEEK) as LAST_WEEK_MONDAY;
+------------------+
| LAST_WEEK_MONDAY |
+------------------+
| 2023-10-23 |
+------------------+
1 row in set (0.00 sec)
# 查询上周天日期
mysql> select SUBDATE(CURDATE(), WEEKDAY(CURDATE()) + 1) as LAST_WEEK_SUNDAY;
+------------------+
| LAST_WEEK_SUNDAY |
+------------------+
| 2023-10-29 |
+------------------+
1 row in set (0.00 sec)
详见:
MySQL dayofweek()函数
MySQL weekday()函数
MySQL DATE_SUB和SUBDATE函数:日期减法运算
MySQL查询本周、上周、本月、上个月份数据的sql代码
时间范围BETWEEN…AND…
当数据库字段中存储的是yyyy-MM-dd
格式,即date类型:用between and
查询,参数yyyy-MM-dd
格式时,包含头尾,相当于x>=y && x<=z
。
当数据库字段中存储的是yyyy-MM-dd HH:mm:ss
格式,即datetime类型:用between and
查询,参数yyyy-MM-dd HH:mm:ss
格式时,包含头尾,相当于:x>=y && x<=z
;参数yyyy-MM-dd
格式时,只包含头,相当于:x>=y && x<z
。
if语句、if…else语句、case语句
if语句做为表达式使用,语法格式为:IF(expr1,expr2,expr3)
。如果expr1
是TRUE (expr1 <> 0 and expr1 <> NULL),则IF()的返回值为expr2; 否则返回值则为expr3。IF()的返回值为数字值或字符串值,具体情况视其所在语境而定。
if也可以用CASE WHEN
来实现:
SELECT CASE 列名
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
ELSE 结果3
END
as 别名
IF…ELSE…做为流程控制语句使用,语法格式如下:
IF search_condition THEN
statement_list
ELSEIF search_condition THEN
statement_list
ELSE
statement_list
END IF;
详见:MySQL:if语句、if…else语句、case语句,使用方法解析
联合查询
mysql left join 可以写不等值吗
MySQL联合查询(多表查询)
sql中的join和inner join的区别
精度控制
MySQL中保留两位小数
MySQL数字的取整、四舍五入、保留n位小数
使用索引
MySQL中in到底走不走索引?
MySQL中NULL对索引的影响
为空判断
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用
字符串处理
详解MySQL中CONCAT()函数的用法(链接字符串)
MySQL中group_concat函数用法总结
mysql使用instr实现字符串startWith和endWith效果
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,在下面评论区告诉我^_^^_^