4
a_id employee_id    date       checkin          checkout
1       1        31-10-2012   09:13:54 AM      05:30:55 PM
2       1        01-11-2012   09:34:39 AM      05:30:55 PM

我有以下考勤表....我想获取特定月份的所有签到和签出时间,例如 01-10-2012 到 31-10-2012 ....我使用过类似的东西

select `employee_id`,`date`,`checkin`,`checkout`
from `attendence` 
where `date` >= '01-10-2012'
    and `date` < '31-10-2012'

现在这个查询的问题是返回结果但下个月的第一个日期

这是它给我的结果

 employee_id    date       checkin          checkout
     1        31-10-2012   09:13:54 AM      05:30:55 PM
     1        01-11-2012   09:34:39 AM      05:30:55 PM

我只想要一个特定月份的结果,就像上面的查询一样

employee_id         date       checkin          checkout
         1        31-10-2012   09:13:54 AM      05:30:55 PM



a_id    int(11) No       
employee_id int(11) No       
date    varchar(15) No       
checkin varchar(32) No       
checkout    varchar(32) No      

plzzzz 帮助我被困在这里的人:(

4

4 回答 4

12

您可以使用DATE_FORMAT

select `employee_id`,`date`,`checkin`,`checkout`
from `attendence` 
where DATE_FORMAT(date, "%m-%Y") = "10-2012"

查看FiddleDemo它对我有用

于 2012-10-31T06:07:02.563 回答
3

尝试这个

select `employee_id`,`date`,`checkin`,`checkout`
from `attendence` 
where `date` BETWEEN  MONTH('01-10-2012')
AND  MONTH( '31-10-2012')

如果想要年份和月份

select `employee_id`,`date`,`checkin`,`checkout`
from `attendence` 
where `date` BETWEEN  MONTH('01-10-2012')
AND  MONTH( '31-10-2012')
AND `date` BETWEEN  YEAR('01-10-2012')
AND  YEAR( '31-10-2012')
于 2012-10-31T06:07:17.070 回答
0

您应该使用列datetime类型date与本机日期比较。

或者

尝试这个:

select `employee_id`,`date`,`checkin`,`checkout`
from `attendence` 
where DATE(`date`) >= DATE('01-10-2012')
    and DATE(`date`) < DATE('31-10-2012')
于 2012-10-31T06:21:45.223 回答
0

注意 DATE 中字符串的格式。它应该是 yyyy-MM-dd。

select 
    `employee_id`,`date`,`checkin`,`checkout` 
from 
    `attendence` 
where 
DATE(`date`) >= DATE('2012-10-01') 
    and DATE(`date`) < DATE('2012-10-31');
于 2016-02-01T01:14:57.330 回答