当目前为止呢,个人对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 userWHERE 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
记录已完成!