2012-04-18 63 views
0

我怎樣才能用BETWEEN運算符選擇存儲爲varchar的日期(格式:「2012.04」)?查詢varchar日期與之間

我需要在此字段上選擇一年的時間間隔。

現在我這個嘗試,但是這給我的MySQL語法錯誤:

SELECT DISTINCT monthcol 
FROM bo_alerts 
WHERE STR_TO_DATE(monthcol , '%Y.%m') BETWEEN 
      (STR_TO_DATE('2012.04', '%Y.%m') AND STR_TO_DATE('2011.03', '%Y.%m')) 
ORDER BY monthcol DESC 

的日期現在靜態的(用於測試),但我需要在之間,從而計算第二值它將在BETWEEN部分的第一個值精確到-1年。

非常感謝!

+0

好吧,我發現了語法錯誤的解決方案:不需要值之間的括號。但它仍然不會給我任何值... – VORiAND 2012-04-18 09:04:40

+1

切換參數日期。需求之間的第一個表達式小於第二個表達式。而且,如果您將日期存儲爲變量,則不必將它們轉換回日期。比較仍然有效:'monthcol在'2011.03'和'2012.04'之間)' – 2012-04-18 09:07:51

回答

1

鑑於日期似乎是固定長度字符串,爲什麼不使用字符串比較?:

SELECT DISTINCT monthcol 
FROM bo_alerts 
WHERE monthcol BETWEEN '2011.03' AND '2012.04' 
ORDER BY monthcol DESC 

注意,我顛倒的日期的爲了滿足具有比第二第一最少SQL實現。

+0

EPiC失敗了......還有一個facepalm ...只需要反轉參數,非常感謝!你是否也有一年的計算解決方案?第一個值來自外部,爲此我需要計算-1年。我認爲:varchar-> date-> date-1year-> varchar – VORiAND 2012-04-18 09:13:59

+1

任何使用本地數據庫日期或時間類型以外的東西來編碼日期的模式都需要額外的麻煩來做算術。也許改變表結構,以便可以直接使用日期算術基元。這也提高了可維護性。 – wallyk 2012-04-18 09:16:37

0

Renove '.'從它的工作日期開始。

試試下面的查詢:

SELECT DISTINCT monthcol 
FROM bo_alerts 
WHERE concat(LEFT(monthcol,4),RIGHT(monthcol,2)) BETWEEN 201204 AND 201103 
ORDER BY monthcol DESC