php – 如何基于一天(而不是日期)过滤集合?
发布时间:2020-12-13 22:24:11 所属栏目:PHP教程 来源:网络整理
导读:这里的最终目标是获取今天生日的客户列表,并向他们发送凭证代码(也以编程方式完成). 要做到这一点,我今天需要抓住所有客户的生日.在SQL中,我会将日期转换为日期和月份并查询,但我不确定如何在集合中执行此操作.目前我有: $collection = Mage::getResourceMo
这里的最终目标是获取今天生日的客户列表,并向他们发送凭证代码(也以编程方式完成).
要做到这一点,我今天需要抓住所有客户的生日.在SQL中,我会将日期转换为日期和月份并查询,但我不确定如何在集合中执行此操作.目前我有: $collection = Mage::getResourceModel('customer/customer_collection') ->joinAttribute('dob','customer/dob','entity_id'); ->addAttributeToFilter('dob','2015-10-02 00:00:00'); 这仅适用于2015年2月10日持有DOB的人.在这个例子中,我需要匹配每个人的出生日期,即10月2日,而不仅仅是2015年10月2日.那么,我如何省略年份,只包括日期和月份? 我已经能够使用LIKE实现这一点,但这似乎没有得到优化,我想假设有一个更好的方法: $collection = Mage::getResourceModel('customer/customer_collection') ->joinAttribute('dob','entity_id') ->addAttributeToFilter('dob',array('like' => '%-10-02 00:00:00')); 解决方法
一个简单的解决方案就像这个实现查询,根据您的需要逻辑在这里:
SELECT emp_firstname AS first_name,emp_lastname AS last_name,emp_birthday AS dob FROM emp WHERE MONTH(emp_birthday)=MONTH(CURDATE()) AND DAY(emp_birthday)=DAY(CURDATE()) or if you want to consider also leap years,you could use this: SELECT emp_firstname AS first_name,emp_birthday AS dob FROM emp WHERE emp_birthday + INTERVAL YEAR(CURDATE())-YEAR(emp_birthday) + (MONTH(emp_birthday)<MONTH(CURDATE()) OR (MONTH(emp_birthday)=MONTH(CURDATE()) AND DAY(emp_birthday)<DAY(CURDATE()))) YEAR = CURDATE() If someone's date of birth is on 29th of February,and today is 28th of February and this year is not a leap year,my last query will consider his/her birthday as today. My second query could be also simplified like this: SELECT emp_firstname AS first_name,emp_birthday AS dob FROM emp WHERE (MONTH(emp_birthday)=MONTH(CURDATE()) AND DAY(emp_birthday)=DAY(CURDATE())) OR (DAY(LAST_DAY(emp_birthday))=29 AND DAY(emp_birthday)=29 AND DAY(LAST_DAY(CURDATE()))=28); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |