Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 选择两个月之间有年份差异的记录_Mysql_Sql_Select_Between - Fatal编程技术网

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

Mysql 选择两个月之间有年份差异的记录,mysql,sql,select,between,Mysql,Sql,Select,Between,我有一张表格,里面有按月份和年份划分的人的记录。 表有多个列,其中有两列是fldmonth和fldyear,分别包含月号和年 现在我想获取不同年份月份之间的数据。(如2012年3月至2013年6月) 我正在使用以下查询,但没有得到正确的记录 SELECT * FROM 'table' WHERE user_id = 'id' AND STR_TO_DATE(CONCAT('fldyear', 'fldmonth', '01'), '%Y%m%d') BETWEEN STR_TO_DATE(CON

我有一张表格,里面有按月份和年份划分的人的记录。 表有多个列,其中有两列是fldmonth和fldyear,分别包含月号和年

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

我正在使用以下查询,但没有得到正确的记录

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)
(此处给出的表名和用户ID仅为示例)

请需要帮助


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

从列名中删除
单引号

试试这个:

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';

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' );

添加一个令人愉快的摘要,但数据是敏感的。请考虑示例示例。这个查询实际上有什么问题?至少发布您的表模式,如果没有字段名称,您希望如何帮助?真的很抱歉。是,但列的架构为。。用户_id varchar(100)、fldmonth smallint(2)、fldyear mediumint(4)@Shri你能发布你的表模式吗?@Shri Saharsh Shah是对的,但也可以看看。。实际上,您需要在您的条件中添加
()
括号..仍然获取空结果集。我可以使用limit子句吗?获取空结果集。
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');