2016-06-28 87 views
0

我有一个简单的SQL查询,它将搜索两个日期范围之间的匹配行。要搜索的日期格式为'yyyymm' - >年份。获取两个日期范围之间的行

我写了下面的查询,但它给我错误

SELECT * 
FROM `my_table` 
WHERE added_on BETWEEN EXTRACT(YEAR_MONTH FROM `added_on`)='201606' AND 
         EXTRACT (YEAR_MONTH FROM `added_on`)='201706' 

#1064 - 你在你的SQL语法错误;检查对应于你的MySQL服务器版本正确的语法使用 附近 '=' 201606' ,并提取(YEAR_MONTH FROM`added_on` )= '201706' LIMIT 0,30' 在行手册1

+2

'WHERE ADDED_ON BETWEEN '201606' AND' 201706'' – Blank

+0

它应该是动态的... 2016-06-08将通过user.i从字符串 –

+1

提取年份月份'BETWEEN'只能处理值,而不是条件,后者是你所在的试图做 –

回答

2

我认为在这种情况下根本不需要使用EXTRACT。相反,你可以尝试:

SELECT * 
FROM `my_table` 
WHERE added_on BETWEEN '20160601' AND '20170630' 
0

尝试DATE_FORMAT(date,'%Y%m')/EXTRACT(YEAR_MONTH FROM date)实现yyyymm

使用DATE_FORMAT

SELECT * 
FROM `my_table` 
WHERE DATE_FORMAT(added_on,'%Y%m') BETWEEN '201606' AND '201706' 

使用EXTRACT

SELECT * 
FROM `my_table` 
WHERE EXTRACT(YEAR_MONTH FROM added_on) BETWEEN '201606' AND '201706' 

不使用它们

添加01到第一次约会和31到第二date.This代表一个月

SELECT * 
FROM `my_table` 
WHERE added_on BETWEEN '20160601' AND '20170631' 
+0

这个从来没有想过,但要记住,它可能是一个非常*慢查询大型数据集(=我们正在谈论数十万到数百万行) –

0

的第一天和最后一天试试这个查询

SELECT * 
FROM `my_table` 
WHERE EXTRACT(YEAR_MONTH FROM `added_on`) BETWEEN EXTRACT(YEAR_MONTH FROM '201606') AND EXTRACT(YEAR_MONTH FROM '201706') 

'201606'和'201706'应该是用户inpu吨。 如果ADDED_ON列数据类型是日期,写提取物(YEAR_MONTH FROM added_on) 如果没有日期数据类型,只写列名

0

您可以使用下面的查询 -

SELECT * FROM `my_table` WHERE added_on BETWEEN REPLACE(SUBSTRING_INDEX(added_on,'-',2),'-','')='201606' AND REPLACE(SUBSTRING_INDEX(added_on,'-',2),'-','')='201706';