当目前为止呢,个人对Mysql的函数没有进行过统一的学习使用,都是用到了再去学习。而近日开始学习Linux了,所以为了防止这段时期结束后,将此阶段期间遇到的Mysql函数遗忘,开始在此对其做一个简单的记录。

昨天下班前朋友呢让帮忙看一个sql,是关于生日提醒的,实际应用中呢是要实现提前一天提醒用户生日,而sql呢是用来查询后一天要过生日的用户。在她原来的sql中用到了CONCAT、DATEDIFF函数,这两个函数呢我自个儿呢之前是没有用到过,所以在解决完问题之后在此记录一下用法及思路。

首先,来看CONCAT和DATEDIFF函数的定义与用法:

CONCAT() : 用于连接两个或多个字符串。如有任何一个参数为null,则返回值为null。

DATEDIFF():返回两个日期之间的天数。

其次,来看需求:

查询出相对当天,后一天要过生日的用户。

在明确了需求和函数的用法之后我们来看思路:

1、既然是要查后一天要过生日的用户,那我们可以简单看作是查询生日日期比当前日期大一天的用户,那么问题来了,这样的话只能查询到当前年、当前月份、当前日期后一天出生的用户,显然不符合,那再换种思路,假设所有用户都在同一年出生,这样我们获取生日日期比当前日期大一天的用户不就可以了^_^~

2、在1中我们可以看出,这样看起来好像是没什么问题了,但是仔细想想,假如当前日期是12月31号,那后一天(也就是1月1号)过生日的用户要是按照1的思路能查询的到吗?显然不能。那我们再来看12月31号和1月1号,有没有想到跨年呢,没错,就是跨年,既然这样,我们将所有用户生日日期年份替换成当前年跨年后的年份,这样根据日期间天数为1的条件不就可以筛选出12月31号后一天过生日的用户了吗^_^~

最后,我们来看下sql的实现:

1、替换+组合生日日期:

替换生日日期年份为当前年:

CONCAT(YEAR(NOW()),DATE_FORMAT(birthday,'-%m-%d'))

替换生日日期年份为当前年跨年后年份:

CONCAT(YEAR(NOW())+1,DATE_FORMAT(birthday,'-%m-%d'))

2、处理后生日日期与当前日期间天数:

普通:

DATEDIFF(CONCAT(YEAR(NOW()),DATE_FORMAT(birthday,'-%m-%d')),NOW())

跨年:

DATEDIFF(CONCAT(YEAR(NOW())+1,DATE_FORMAT(birthday,'-%m-%d')),NOW())

3.整合,查询当前日期后一天要过生日的用户信息:

SELECT *

FROM user

WHERE

DATEDIFF(CONCAT(YEAR(NOW()),DATE_FORMAT(birthday,'-%m-%d')),NOW()) = 1OR

DATEDIFF(CONCAT(YEAR(NOW())+1,DATE_FORMAT(birthday,'-%m-%d')),NOW()) = 1

最后:

DATEDIFF 函数中两个参数,前一个比后一个大时,值>=0 ,前一个比后一个小时,值<=0

记录完毕!

mysql中datediff跨年的用法_Mysql 函数使用记录(一)——DATEDIFF、CONCAT相关推荐

  1. MySQL数据库,从入门到精通:第四篇——MySQL中常用的运算符及其用法

    MySQl学习(MySQL数据库,从入门到精通:第四篇--MySQL中常用的运算符及其用法 第四篇_MySQL中常用的运算符及其用法运算符 1. 算术运算符 1.加法与减法运算符 2.乘法与除法运算符 ...

  2. mysql中计算两个日期的时间差函数TIMESTAMPDIFF用法

    mysql中计算两个日期的时间差函数TIMESTAMPDIFF用法:  语法:  TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)  说明:  ...

  3. MySQL中ALL 和 ANY的用法

    "历览前贤国与家,成由勤俭破由奢" 序 今天看书得到MySQL中ALL和ANY的用法,在此之前甚至都不知道MySQL还有这两个运算符. 现在数据表如下,分别是姓名.薪水.部门ID: ...

  4. mysql中日期的加减操作_mysql 日期加减操作

    1. MySQL 为日期增加一个时间间隔:date_add() set @dt = now(); select date_add(@dt, interval 1 day);        -- add ...

  5. MySQL源码学习:MySQL中禁止跨库访问的实现

    摘要:  先说一下这里"跨库"的意思:当前use的是db1, 仍可以使用select * from db2.table1来访问table1表. 这样使得我们需要访问同一个MySQL ...

  6. mysql 中存储引擎是什么意思_mysql常用的存储引擎是什么

    mysql常用的存储引擎是什么 发布时间:2020-12-02 09:35:04 来源:亿速云 阅读:62 作者:小新 这篇文章将为大家详细讲解有关mysql常用的存储引擎是什么,小编觉得挺实用的,因 ...

  7. mysql gt resource_讲解MySQL中lt;=gt;操作符的用法

    问题 : 我在看以前的一个开发者的代码时看到 WHERE p.name <=> NULL 在这个查询语句中 <=>符号是什么意思啊?是不是和 =号是一样啊?还是一个语法错误啊? ...

  8. 数据库mysql中delimiter的作用和用法

    mysql中解释器以分号作为结束标记. 但有时候虽然不想终止,但是又想要执行某一段呢? delimiter|| CREATE TRIGGER changeAvgAge AFTER INSERT ON ...

  9. MySQL中索引与视图的用法与区别详解

    索引与视图是我们在日常使用mysql必不可少的一部分,最近在学习中看到一本书中关于这方法写的不错,所以这篇文章主要给大家介绍了关于MySQL中索引与视图的使用与区别的相关资料,需要的朋友可以参考借鉴, ...

最新文章

  1. 微信高级研究员解析深度学习在NLP中的发展和应用 | 公开课笔记
  2. URI,URL和URN有什么区别?
  3. mysql dba系统学习(1)mysql各版本编译安装
  4. Android NDK学习笔记(转)
  5. Microsoft .NET Pet Shop 4 架构与技术分析(转)
  6. PyTorch-模型
  7. K-Complete Word CodeForces - 1332C(贪心)
  8. python中的文件备份过程
  9. python 并发执行命令_python: 多线程实现的两种方式及让多条命令并发执行
  10. 腾讯:我火了,新浪:你没有!
  11. python list二维数组_python中的二维数组和lamda
  12. 深入理解Java的反射与动态代理
  13. 计算机硬盘怎么设置ntfs,如何把计算机硬盘文件系统fat32改为ntfs.doc
  14. Directx11代码下载
  15. android屏幕录制
  16. 我的世界服务器修改空岛范围,我的世界空岛指令权限大全 | 手游网游页游攻略大全...
  17. Hexo博客中插入图片,在网页中无法显示:采用图床外链的方法
  18. 1100. 校庆 (25 分)
  19. 【pthread_cancel函数:避免踩坑】
  20. 清华计算机类出国留学,清华大学的王牌专业及出国留学率.doc

热门文章

  1. 文件和目录操作命令(19 个)--14.dirname
  2. T研究:国内云BPM市场规模尚小,预计2018年仅为3.29亿元
  3. golang之终端操作,文件操作
  4. QRCode二维码生成方案及其在带LOGO型二维码中的应用(2)
  5. 解决 spring mvc 3.0 结合 hibernate3.2 使用tx:annotation-driven声明式事务无法提交的问题(转载)...
  6. Oracle中查看所有表和字段
  7. C语言 指针+二维数组详解 (应付期末、考研的最强笔记,建议收藏)
  8. bat批量剪切命令_批处理剪切文件夹的dos指令怎么写
  9. 为什么要写this在访问成员变量的时候_java面向对象(局部变量和成员属性)
  10. python画点云_python scipy Delaunay绘制点云