背景:在开发过程中,我们经常需要根据时间作为判断条件来查询数据,例如:当月,当日,当前小时,几天内......

1. 当月

我们只需要使用一个mysql的MONTH(date)函数即可实现。(注意判断年份)

MONTH(date);
-- 用法:MONTH函数返回一个整数,表示指定日期值的月份。 -- 举例
SELECT MONTH('2020-11-11 00:00:00')
-- 返回值是11

2. 30天内

之所以把“30天内”放在当月的后面,是因为我经常会遇到这两个需求相互转换的情况,“30天内”也可以称作“一个月内”。

这种情况我们需要使用DATEDIFF(expr1,expr2)函数。

DATEDIFF(expr1,expr2)
-- 用法:参数为两个日期,返回的是expr1-expr2的天数差 -- 举例
SELECT DATEDIFF('2020-11-01 08:00:00','2020-11-11 00:00:00')
-- 返回值是-10

3. 当日

当日需要使用TO_DAYS(date)函数。

TO_DAYS(date)
-- 用法:返回从0000年(公元1年)至当前日期的总天数。 -- 举例
SELECT TO_DAYS('0000-01-01')
-- 返回值是1
SELECT TO_DAYS('0001-01-01')
-- 返回值是366

4. 当前小时

这种情况需要HOUR(date)CURDATE()函数配合使用。

HOUR(date)
-- 用法:返回当前时间是今日的第几个小时
-- 举例
SELECT HOUR('2020-11-11 11:11:11')
-- 返回值是11 CURDATE()
-- 用法:返回今日的日期,不包括时分秒, yyyy-MM-dd -- 使用举例
select * from table where created_at > CURDATE() and HOUR(created_at) = HOUR(now())

5. x天内

可以使用DATE_SUB(date,INTERVAL expr unit)函数来实现。

DATE_SUB(date,INTERVAL expr unit)
-- 用法:起始日期date 减去一个时间段后的日期

后面的单位unit有很多值可以选择,如下表:

类型(unit值) 含义 expr表达式的形式
YEAR YY
MONTH MM
DAY DD
HOUR hh
MINUTE mm
SECOND ss
YEAR_MONTH 年和月 YY和MM之间用任意符号隔开
DAY_HOUR 日和小时 DD和hh之间用任意符号隔开
DAY_MINUTE 日和分钟 DD和mm之间用任意符号隔开
DAY_SECOND 日和秒钟 DD和ss之间用任意符号隔开
HOUR_MINUTE 时和分 hh和mm之间用任意符号隔开
HOUR_SECOND 时和秒 hh和ss之间用任意符号隔开
MINUTE_SECOND 分和秒 mm和ss之间用任意符号隔开
-- 举例
-- 七天内的数据查询
select * from table where created_at > DATE_SUB(CURDATE(),INTERVAL 7 DAY)

6. 多少天内数据统计

我们经常还会遇到这种需求,统计7天内每天数据的量。这种情况下,我们需要考虑没有数据推送的情况,即为0也要得到。

我的思路如下:

SELECT
DATE_SUB( CURDATE(), INTERVAL m.s day ) AS orderDate
FROM
(
SELECT 0 as s UNION ALL
SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
SELECT 5 UNION ALL
SELECT 6
) m

以上面的sql查询结果作为临时表,匹配数据表统计多少天内的数据数量

-- 举例:查询12个月内每个月数据的数量
SELECT COUNT(t.created_at),res.date FROM
(SELECT
DATE_FORMAT(DATE_SUB( CURDATE(), INTERVAL m.s MONTH ),'%Y-%m') AS date
FROM
(
SELECT 0 as s UNION ALL
SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
SELECT 5 UNION ALL
SELECT 6 UNION ALL
SELECT 7 UNION ALL
SELECT 8 UNION ALL
SELECT 9 UNION ALL
SELECT 10 UNION ALL
SELECT 11
) m)res
left join
table t on res.date = DATE_FORMAT(t.created_at,'%Y-%m')
GROUP BY date

MySQL使用时间作为判断条件的更多相关文章

  1. mysql用查询结果当删除的判断条件进行删除报错1093 You can't specify target table解决方法

    mysql用查询结果当删除的判断条件进行删除报错1093 You can't specify target table解决方法 #分开两个sql执行正常的语句,只保留最新1000条数据,删掉1000条 ...

  2. MYSQL如何在创建表时添加判断条件

    大家好,我是小皓. 一.背景 今天在博主练习MYS创建表操作时遇到一个语法报错,就想着来和大家分享一下MYSQL如何在创建表时添加判断条件: ERROR 1064 (42000): You have ...

  3. sql语句not in判断条件注意事项

    sql语句not in判断条件注意事项 问题描述:mysql数据库,存在两个表org表和kdorg表,用于存储组织信息.现在我需要从org表找出组织,条件为该组织不在kdorg表里. sql语句:se ...

  4. if语句中的判断条件(nginx)

    if语句中的判断条件   正则表达式匹配:     ==:等值比较;     ~:与指定正则表达式模式匹配时返回"真",判断匹配与否时区分字符大小写:     ~*:与指定正则表达 ...

  5. ThinkPHP3.2中if判断条件是两个变量

    <select name="typeId"> <foreach name="typeInfo" item="v"> ...

  6. SQL语句Where中使用别名作为判断条件

    当我们使用某个表达式作为输出的一列时,我们无法再Where条件中直接使用该列作判断条件.   例如下面的SQL语句: select id, (c1 + c2) as s from t1  where ...

  7. mysql text字段判断是否为空

    mysql text字段判断是否为空 mysql text字段为空select * from `tableName` where `textField` is null or `textField` ...

  8. .Net程序员之Python基础教程学习----判断条件与循环[Fourth Day]

        今天学习Python的判断条件与循环操作. 一. 布尔变量: 在学习判断条件之前必须的了解bool变量,在Python中bool变量与C语言比较类似,与.net差别比较大,其中下面集中情况需要 ...

  9. Shell脚本IF条件判断和判断条件总结

    转自:http://m.jb51.net/article/56553.htm 这篇文章主要介绍了Shell脚本IF条件判断和判断条件总结,本文先是给出了IF条件判断的语法,然后给出了常用的判断条件总结 ...

随机推荐

  1. mysqlslap基准测试

    目录 简介 二.例子 三.其它选项 简介 mysqlslap是mysql自带的基准测试工具 优点:查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测 ...

  2. Nginx开启php_info

    目录 一.简介 二.配置 三.参数 一.简介 pathinfo是php需要的东西,php可以用这个函数来获得信息. http://wangying.sinaapp.com/tools/index.ph ...

  3. 利用 clip-path 实现动态区域裁剪

    背景 今天逛 CodePen,看到了这样一个非常有意思的效果: CodePen Demo -- Material Design Menu By Bennett Feely 这个效果还是有一些值得探讨学 ...

  4. Linux网络编程入门

    (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...

  5. 每一个each(Power Query 之 M 语言)

    each _ 固定结构,表示每一个(废话,each这单词中文意思就是每一个) 但后面的下划线,是个省略参数的写法-- 首先,each后面不是非要跟_ 其次,_代表的意思是指定列里同行的每一个,这时的公 ...

  6. JDK安装错误问题总结。

    Windows10安装JDK,测试java -version时出现could not open XXX\jvm.cfg的解决方法. 1. 切记,环境变量修改后重新测试时一定要关闭命令再重新打开才生效 ...

  7. CF173A Rock-Paper-Scissors 题解

    Content 有 \(2\) 个人在玩石头剪刀布,已知他们的出手都有一定的规律,求 \(n\) 局之后两个人各输了几局. 数据范围:\(1\leqslant n\leqslant 2\times 1 ...

  8. Tornado WEB服务器框架 Epoll-- 【模板】

    4.2 使用模板 1. 路径与渲染 使用模板,需要仿照静态文件路径设置一样,向web.Application类的构造函数传递一个名为template_path的参数来告诉Tornado从文件系统的一个 ...

  9. MAMP的使用

    MAMP下载并安装 下载地址:https://pan.baidu.com/s/1TgoKBG3F59NGO8lEj9mf4Q 密码:2m3d 安装:按照提示,一直下一步直到完成 MAMP操作

  10. 8-1yum私有云仓库

    针对centos8的BaseOS.AppStream源 yum -y install httpd systemctl enable --now httpd mkdir -pv /var/www/htm ...