我有一张表,其中包含按月和年份记录的人员。 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格式。但仍然是空的结果集
答案 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');
答案 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' );