2016-06-28 75 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'; 
相關問題