我想选择所有在即将到来的 5 天过生日的员工。生日保存在日期字段中。感觉我必须使用介于两者之间,但年份范围会破坏结果。
基本上我只想按月和日选择一个日期,范围是 5 天。
数据库方案:
CREATE TABLE IF NOT EXISTS `tbl_office_employee` (
`id` int(11) NOT NULL auto_increment,
`firstname` varchar(256) collate utf8_unicode_ci default NULL,
`surname` varchar(256) collate utf8_unicode_ci default NULL,
`birthdate` date NOT NULL,
`telephone` varchar(256) collate utf8_unicode_ci default NULL,
PRIMARY KEY (`id`)
)
有人知道一个查询来完成这个吗?
最佳答案
您想在 MySQL 中使用类似的东西(已编辑 - 真正可行的示例):
SELECT *
FROM `tbl_office_employee` e
WHERE FLOOR(
(
UNIX_TIMESTAMP(
CONCAT(
YEAR(CURDATE()) + (DATE_FORMAT(e.birthdate, '%m-%d') < DATE_FORMAT(CURDATE(), '%m-%d')),
DATE_FORMAT(e.birthdate, '-%m-%d')))
- UNIX_TIMESTAMP(CURDATE()))
/ 86400) < 5
下面编写的 SQL 查询不会选择明年的生日(即 1 月 1 日至 5 日,当它是 12 月 31 日时),所以使用上面的一个...
选择 * FROM
tbl_office_employee
e WHERE UNIX_TIMESTAMP(DATE_FORMAT(e.birthdate, CONCAT(YEAR(CURDATE()), '-%m-%d'))) BETWEEN UNIX_TIMESTAMP(CURDATE() ) AND UNIX_TIMESTAMP(DATE_ADD(CURDATE(), INTERVAL 5 DAY))
我不得不使用 UNIX_TIMESTAMP
,因为日期发生了变化,即从 5 月 31 日到 6 月 5 日(5 不大于 31)并且在 e 中更改了年份.birthdate
.
可以在 DQL(Doctrine 1)中完成:
Doctrine_Query::create()
->select('e.firtsname')
->from('tbl_office_employee e')
->where('e.date BETWEEN ? AND ?', array($today_date, $date_plus_5_days))
->getSqlQuery();
应该输出基本相同。
我不认为 DATE_ADD
在开箱即用的 DQL 中可用,但是 there is chapter called DQL User Defined Functions in docs, which has example implementation of DATE_ADD
function for MySQL .
关于mysql - Doctrine2 选择生日范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6187675/