sqlserver如何实现本周过生日的用户

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver如何实现本周过生日的用户相关的知识,希望对你有一定的参考价值。

数据库中有一个生日表.是用户的生日 如 1990-01-12 . 请问,如何查询出本周过生日的用户. 1.10-1.16之间过生日的用户???

直接用select查,select *from 表名 where 本周第一天 <= 生日字段名 and 生日字段>=本周最后一天 所填的日期要符合格式,sqlserver自带有文档,一查就知道 参考技术A 此处可用sql的datediff函数. 举个例子:select * from table where datediff(d,生日字段,getdate())=7 ----表示生日日期距离今天为7天的数据. ----------即为本周内过生日的用户... -------------希望对你有帮助. 参考技术B mysql环境下,亲测有效:
select * from 用户信息表 where week(now())=week(concat(YEAR(NOW()),DATE_FORMAT(用户的生日,'%m%d')));

Mysql 函数使用记录——DATEDIFFCONCAT

当目前为止呢,个人对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()) = 1
OR
    DATEDIFF(CONCAT(YEAR(NOW())+1,DATE_FORMAT(birthday,-%m-%d)),NOW()) = 1

最后:

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

记录完毕!

以上是关于sqlserver如何实现本周过生日的用户的主要内容,如果未能解决你的问题,请参考以下文章

SQLServer数据库取得当前时间

求高手解决:SQL语句查询本周内生日的同学,以及本月内生日的同学....

如何在sql server中获取本周的每日数据

如何实现日期字段输入

在sql server 2008中如何查询本日、本周和本月数据

本周总结