2017-06-25 89 views
1

我發現是這樣的:從DB按日期選擇,但不完全與日,月和年

SELECT * FROM POSTY WHERE MONTH(data_dodania) = 5 AND YEAR(data_dodania) = 2017 

但它是一個有點不是我所期待的。也許它甚至不存在。 這就是爲什麼我有問題,是否有可能做一些更聰明的檢查數據?

Like where date=201705(第一年,第二月)。

這一個不工作我知道我試過。但我輸入這個來顯示我要求的東西。

Idk,where date='May2017什麼?

回答

1

您可以使用MySQL的DATE_FORMAT以任何您想要的方式格式化日期。例如。下面的查詢在YYYYMM格式格式的日期:

SELECT DATE_FORMAT(data_dodania, '%Y%m') 
FROM POSTY; 

現在,如果你在這個格式有日期,你可以使用DATE_FORMATWHERE條件來過濾行,如:

SELECT * 
FROM POSTY 
WHERE DATE_FORMAT(data_dodania, '%Y%m') = '201705'; 

同樣,格式打印May2017是%M%Y(文件有一個格式和示例列表)。

+0

好的,謝謝:)。 –

+0

@DarshanMehta我對使用這個很感到厭倦,因爲在使用'DATE_FORMAT'等函數時你無法使用索引。每一行都需要進行行掃描,執行和比較以選擇一個範圍。沒有索引可以使用。 – FrankerZ

+0

我知道,我猜@KrystianPolska想格式化日期(或者已經有了這種格式的日期),在這種情況下,我們需要使用'DATE_FORMAT'函數進行比較。 –

1

使用日期執行查詢的最佳方法是指定要查找的範圍。這將能夠利用data_dodania字段上的索引。使用任何函數都會導致查詢使用ROW SCAN來執行函數,然後比較值。我強烈建議使用範圍:

SELECT * FROM POSTY WHERE data_dodania >= '2017-05-01' AND data_dodania <= '2017-05-31' 

另一種方式是BETWEEN語法使用(這在語法上是與上面相同):

SELECT * FROM POSTY WHERE data_dodania BETWEEN '2017-05-01' AND '2017-06-01' 
相關問題