【问题标题】:mysql query with datediff between expyredate and now datemysql查询与过期日期和现在日期之间的datediff
【发布时间】:2017-09-19 09:24:37
【问题描述】:

在通过 php 文件为它编写正确的代码执行之前,我在正确编写 sql 查询之前遇到了一些问题。

实际上,我有一个表 sql ( tblperson ),其中包含一些人名 ( as name ) 和他们的生日日期 ( yy/mm/dd ),我需要查看到今天为止过去 15 天内过生日的人。

我尝试了一些不同的查询但没有成功:

SELECT name, birthday FROM tblperson 
WHERE  DATEDIFF(birthday,(SELECT DATE_SUB(NOW(), INTERVAL 15 DAY))


SELECT name, birthday  FROM tblperson 
WHERE  DATE(bb) = DATE_SUB(birthday,(NOW(), INTERVAL 15 DAY))

我该如何解决?

【问题讨论】:

  • 您离解决方案不远了,您的第一个查询使用DATEDIFF(),它所需要的只是与结果进行比较的东西,例如DATEDIFF(...) <= 15。也不要忘记交换DATEDIFF() 的参数并摆脱DATE_SUB(),诸如此类的小事。

标签: mysql sql datediff


【解决方案1】:

由于年份的原因,生日问题很棘手。这是一种几乎有效的方法:

select name, birthday
from tblperson 
where format(bb, '%m%d') <= format(curdate(), '%m%d') and
      format(bb, '%m%d') >= format(curdate() - interval 15 day, '%m%d');

问题是一年中的前 15 天。这是一种明确处理的方法:

select name, birthday
from tblperson 
where (format(curdate(), '%m%d') > '0115' and
       format(bb, '%m%d') <= format(curdate(), '%m%d') and
       format(bb, '%m%d') >= format(curdate() - interval 15 day, '%m%d')
      ) or
      (format(curdate(), '%m%d') < '0115' and
       format(bb + interval 15 day, '%m%d') <= format(curdate() + interval 15 day, '%m%d') and
       format(bb + interval 15 day, '%m%d') >= format(curdate(), '%m%d')
      )

【讨论】:

  • 您的第一个解决方案效果很好,只是我无法创建正确的 php 脚本来执行它,我尝试过 $sql = "select domain,expirydate\n" 。 "来自 tbldomains\n" 。 "其中格式(expirydate, \'%m%d\') expirydate, \'%m%d\') >= format(curdate() - 间隔 15 天, \'%m%d\')";但它不起作用,你能帮我吗?非常感谢。
  • 如果你使用双引号定义字符串,我认为你不需要转义单引号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多