2013-07-25 177 views
2

如何在mysql中使用sql查詢提取月份。 日期格式如下:dd/mm/yyyy。從mysql中提取月份

MONTH(datecol) = $month // this does not work. 

但是如果我更改日期格式yyyy-mm-dd它的工作原理,但是這是不是一種選擇。

+1

爲什麼它不是一個選項? o_o – Brewal

+0

使它成爲一個選項 – Strawberry

+0

如果我說這不是一個選項,它不是一個簡單的選項。只有寫入數據時,我們纔會控制數據流入數據庫。 – anonamas

回答

3

該表達式將提取出現在第一個和第二個正斜槓之間的字符串部分。

SUBSTRING_INDEX(SUBSTRING_INDEX('25/07/2013' ,'/',2),'/',-1) 

將返回'07'

爲了得到這個轉換爲數值,給它加零,

SUBSTRING_INDEX(SUBSTRING_INDEX('25/07/2013' ,'/',2),'/',-1) + 0 

將返回7


NOTES數值

該表達式可以處理任何字符串值,而不僅僅是表示指定格式的有效日期的字符串。例如:

SUBSTRING_INDEX(SUBSTRING_INDEX('dd/mm/yyyy' ,'/',2),'/',-1) 

將返回'mm'

如果在字符串中只發現了一個斜線,這將返回斜線以下的部分。如果在字符串中找不到斜槓,則會返回整個字符串。

如果您的目的是驗證字符串是否以指定的格式表示有效的日期值,則可以使用STR_TO_DATE()函數將字符串轉換爲DATE。該表達式的返回值可以用作任何採用DATE參數的MySQL函數的參數,例如示例問題中的MONTH()函數。

4

您可以使用str_to_date將任何格式的日期解析爲SQL日期值。例如:

select month(str_to_date('25/07/2013', '%d/%m/%Y')); 
+0

格式應爲日曆月份的'%c'。 – mavili

+0

這似乎比@ spencer7593的建議更安全,因爲您明確定義了日期格式。 –

+0

我可以將此烤成我當前的查詢嗎? 「SELECT Dest from tbldata WHERE site = $ site」; ? – anonamas