我有一个简单的SQL查询,它将搜索两个日期范围之间的匹配行。要搜索的日期格式是'yyyymm' - >年月。
我写了以下查询,但它给了我错误
[^-\s][Ñña-zA-Z .\-\,]*$
#1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法 '='201606'和'EXTRACT'附近(YEAR_MONTH来自`added_on` )='201706'限制0,30'在第1行
答案 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';