2012-02-08 54 views
9

我在數據庫中存儲日期在date數據類型的列。

比方說,我有,我保存這樣的「2011-01-01」數據列date,「2012-01-01」,「2012-02-02」等

現在我需要做SQL僅選擇行,其中date等於2012

SELECT * FROM table WHERE date=hasSomehowYearEqualTo=2012

會是什麼樣的查詢?

回答

15

使用 - 這將計算所有日期,即使對於那些,你永遠不會使用。它也將使用不可能的索引 - 在數據庫層上最糟糕的情況。

使用

$sql="SELECT * FROM table WHERE `date` BETWEEN '$year-01-01' AND '$year-12-31'" 

作爲一般規則:如果你有一個計算之間的一個常數和計算的選擇上一個字段,使用前者。

+0

關於計算的重點。你也可以做WHERE \'date \'LIKE'$ year - %''。 – ceejayoz 2012-02-08 02:08:18

+3

@ceejayoz這同樣糟糕!它創造了所有日期的字符串表示,沒有索引使用......如果你有一個固定的計算和計算之間的選擇的一個字段,使用前者。 LIKE是場上的計算! – 2012-02-08 02:09:53

+0

這絕對是更好的解決方案。特別是如果你有日期索引。 – 2012-02-08 02:39:54

6

時退房YEAR()docs功能爲MySQL

SELECT * FROM table WHERE YEAR(date)=2012 
-2

select * from DATEPART(YEAR,[DATE])= 2012

相關問題