我在數據庫中存儲日期在date
數據類型的列。
比方說,我有,我保存這樣的「2011-01-01」數據列date
,「2012-01-01」,「2012-02-02」等
現在我需要做SQL僅選擇行,其中date
等於2012
SELECT * FROM table WHERE date=hasSomehowYearEqualTo=2012
會是什麼樣的查詢?
我在數據庫中存儲日期在date
數據類型的列。
比方說,我有,我保存這樣的「2011-01-01」數據列date
,「2012-01-01」,「2012-02-02」等
現在我需要做SQL僅選擇行,其中date
等於2012
SELECT * FROM table WHERE date=hasSomehowYearEqualTo=2012
會是什麼樣的查詢?
做不使用 - 這將計算所有日期,即使對於那些,你永遠不會使用。它也將使用不可能的索引 - 在數據庫層上最糟糕的情況。
使用
$sql="SELECT * FROM table WHERE `date` BETWEEN '$year-01-01' AND '$year-12-31'"
作爲一般規則:如果你有一個計算之間的一個常數和計算的選擇上一個字段,使用前者。
時退房YEAR()
docs功能爲MySQL
SELECT * FROM table WHERE YEAR(date)=2012
select * from DATEPART(YEAR,[DATE])= 2012
關於計算的重點。你也可以做WHERE \'date \'LIKE'$ year - %''。 – ceejayoz 2012-02-08 02:08:18
@ceejayoz這同樣糟糕!它創造了所有日期的字符串表示,沒有索引使用......如果你有一個固定的計算和計算之間的選擇的一個字段,使用前者。 LIKE是場上的計算! – 2012-02-08 02:09:53
這絕對是更好的解決方案。特別是如果你有日期索引。 – 2012-02-08 02:39:54