【问题标题】:Mysql Select record from now to next 7 daysMysql 选择从现在到未来 7 天的记录
【发布时间】:2018-03-25 13:16:58
【问题描述】:

您好,我正在 wordpress 中创建一个函数,我需要在现在和未来 7 天之间获取记录。我尝试了几个查询。但无法得到结果。

SELECT * from wp_postmeta where wp_postmeta.meta_key = '__rp_order_date';

上面的查询返回

meta_id | post_id | meta_key        | meta_value
--------+---------+-----------------+-------------------
7023    | 2979    | __rp_order_date | 2018-03-26 12:00 AM

但是当我按日期过滤时,它不显示任何记录。

方法一

SELECT * from wp_postmeta where wp_postmeta.meta_key = '__rp_order_date' and date(wp_postmeta.meta_value) BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY);

方法二

SELECT * from wp_postmeta where wp_postmeta.meta_key = '__rp_order_date' and date(wp_postmeta.meta_value) <= DATE_ADD(CURDATE(), INTERVAL 7 DAY) 

我的实际意图是执行这段代码,它也没有显示任何内容。

SELECT DISTINCT wp_woocommerce_order_items.order_id,wp_posts.post_status,wp_postmeta.meta_value as delivery_date from wp_woocommerce_order_items 
INNER JOIN wp_posts on wp_posts.ID = wp_woocommerce_order_items.order_id 
INNER JOIN wp_postmeta ON wp_postmeta.post_id = wp_woocommerce_order_items.order_id 
where wp_posts.post_status='wc-processing' and wp_postmeta.meta_key = '__rp_order_date' and DATE(wp_postmeta.meta_value) <= DATE_ADD(CURDATE(), INTERVAL 7 DAY)

我想不通,提前谢谢。

【问题讨论】:

  • 那是因为您将 2018-03-26 12:00 AM 存储为字符串,而不是将该列设置为 DATETIME 类型,如果这是您的实际存储值的话..
  • @FunkFortyNiner 实际上是我无法控制的插件存储的值,有什么办法可以转换查询中的格式吗?谢谢

标签: php mysql sql wordpress datetime


【解决方案1】:

代替 date(wp_postmeta.meta_value)使用STR_TO_DATE(wp_postmeta.meta_value, '%Y-%m-%d')

你也可以这样使用,你必须在你的时间内 CONCAT :00varchar 转换为 datetime

SELECT * 
FROM wp_postmeta 
WHERE wp_postmeta.meta_key = '__rp_order_date' 
AND STR_TO_DATE(CONCAT(SUBSTRING(wp_postmeta.meta_value,1,16),':00 ',SUBSTRING(wp_postmeta.meta_value,18,2)),'%Y-%m-%d %r') 
BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY);

现场演示

http://sqlfiddle.com/#!9/748788/9

【讨论】:

  • 它有效,STR_TO_DATE(wp_postmeta.meta_value, '%Y-%m-%d') BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 9 DAY),谢谢。
  • 欢迎! @RyVan
  • 你也可以检查另一种方法
  • 我可以完全忽略时间,因为我只需要日期,所以第一个解决方案效果更好,但查询很好。tanx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
  • 2011-03-18
  • 2014-08-07
相关资源
最近更新 更多