选择两个月之间的年份差异记录

时间:2014-01-27 06:35:50

标签: mysql sql select between

我有一张表,其中包含按月和年份记录的人员。 table有多列,其中有两列是fldmonth& fldyear,分别包含月份和年份。

现在我想在不同年份的月份之间获取数据。 (例如3-2012至6-2013)

我正在使用以下查询,但未获得正确的记录。

SELECT * FROM 'table' WHERE
user_id = 'id' AND
STR_TO_DATE(CONCAT('fldyear', 'fldmonth', '01'), '%Y%m%d') BETWEEN
STR_TO_DATE(CONCAT('2012', '3', '01'), '%Y%m%d') AND 
STR_TO_DATE(CONCAT('2013', '6','01'), '%Y%m%d');

表架构:

user_id varchar(100), fldmonth smallint(2), fldyear mediumint(4)

(此处给出的表名和用户名仅为例)

请帮助。

注意:我在日期格式中也使用%c,因为月份是1,2,... 12格式。但仍然是空的结果集

3 个答案:

答案 0 :(得分:1)

从列名中删除Single quote

试试这个:

SELECT * 
FROM table 
WHERE user_id = 'id' AND
      STR_TO_DATE(CONCAT(fldyear, fldmonth, '01'), '%Y%c%d') BETWEEN '2012-03-01' AND '2013-06-01';

答案 1 :(得分:1)

SELECT * FROM tbl 
WHERE USERID=1 and
STR_TO_DATE(CONCAT(fldyear,'-',LPAD(fldmonth,2,'00'),'-',LPAD(fldate,2,'00')), '%Y-%m-%d')
BETWEEN
STR_TO_DATE(CONCAT(2012,'-',LPAD(03,2,'00'),'-',LPAD(01,2,'00')), '%Y-%m-%d') AND 
STR_TO_DATE(CONCAT(2013,'-',LPAD(06,2,'00'),'-',LPAD(01,2,'00')), '%Y-%m-%d');

Working Fiddle

答案 2 :(得分:0)

Saharsh Shah是对的,但你需要的是在你的情况下添加括号()

更改条件
WHERE user_id = 'id' AND
( STR_TO_DATE(CONCAT(fldyear, fldmonth, '01'), '%Y%m%d')
BETWEEN '2012-03-01' AND '2013-06-30' );
相关问题