为了账号安全,请及时绑定邮箱和手机立即绑定

MySql 日期范围查询未显示所有记录

MySql 日期范围查询未显示所有记录

PHP
梵蒂冈之花 2021-12-24 15:59:34
我现在正在处理 mysql 查询。我从2018年3月到2019年3月的fetch数据写了一个查询,今年有5000多条记录。我写了一个日期范围从 2018 年 3 月到 2019 年 3 月的查询,但它只显示了 150 条记录还有一件事。数据库中的日期列是 varchar。这是我创建的查询SELECT a.*,b.FROM OrderCalculation aRIGHT JOIN crm_order b   ON a.orderid = b.ordernoWHERE    str_to_date(b.Date,'%Y-%m-%d') >= str_to_date(concat(YEAR(CURDATE()),'-08-01'),'%Y-%m-%d')-INTERVAL 1 YEAR AND    str_to_date(b.Date,'%Y-%m-%d') <= str_to_date(CONCAT(YEAR(CURDATE()),'-08-01'),'%Y-%m-%d')
查看完整描述

1 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

您不应该将日期存储为文本。话虽如此,您当前的调用STR_TO_DATE是不正确的,因为您的日期格式是dd-mm-YYYY,而不是YYYY-mm-dd。尝试以下查询:


SELECT a.*, b.*

FROM crm_order a

LEFT JOIN OrderCalculation b

    ON a.orderid = b.orderno

WHERE

    STR_TO_DATE(b.Date, '%d-%m-%Y') >= '2018-03-01' AND

    STR_TO_DATE(b.Date, '%d-%m-%Y') < '2019-04-01';

相反,如果您想要在当前月份的第一天之前过去一年的所有数据,请尝试:


SELECT a.*, b.*

FROM crm_order a

LEFT JOIN OrderCalculation b

    ON a.orderid = b.orderno

WHERE

    STR_TO_DATE(b.Date, '%d-%m-%Y') >= DATE_FORMAT(NOW() ,'%Y-%m-01') - INTERVAL 1 YEAR AND

    STR_TO_DATE(b.Date, '%d-%m-%Y') < DATE_FORMAT(NOW() ,'%Y-%m-01');


查看完整回答
反对 回复 2021-12-24
  • 1 回答
  • 0 关注
  • 259 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信