获取两个日期范围之间的行

时间:2016-06-28 05:57:03

标签: mysql

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

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

[^-\s][Ñña-zA-Z .\-\,]*$
  

#1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法   '='201606'和'EXTRACT'附近(YEAR_MONTH来自`added_on`   )='201706'限制0,30'在第1行

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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添加到第二个日期。这表示该月的第一天和最后一天

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

答案 2 :(得分: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'应为用户输入。 如果added_on column datatype是date,则写EXTRACT(YEAR_MONTH FROM added_on) 如果不是date数据类型,只需写入列名

答案 3 :(得分:0)

您可以使用以下查询 -

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