【发布时间】:2012-02-29 11:59:47
【问题描述】:
我将日期存储在我的数据库中 date 数据类型的列中。
假设我有 date 列,我在其中存储“2011-01-01”、“2012-01-01”、“2012-02-02”等数据。
现在我需要创建只选择 date 等于 2012 的行的 SQL
SELECT * FROM table WHERE date=hasSomehowYearEqualTo=2012
查询是什么样的?
【问题讨论】:
我将日期存储在我的数据库中 date 数据类型的列中。
假设我有 date 列,我在其中存储“2011-01-01”、“2012-01-01”、“2012-02-02”等数据。
现在我需要创建只选择 date 等于 2012 的行的 SQL
SELECT * FROM table WHERE date=hasSomehowYearEqualTo=2012
查询是什么样的?
【问题讨论】:
查看 MySQL 的 YEAR() docs 函数
SELECT * FROM table WHERE YEAR(date)=2012
【讨论】:
不使用YEAR(date) - 这将为所有日期计算YEAR(date),即使是那些你从未使用过的日期。它还会使索引的使用变得不可能——在 DB 层是最坏的情况。
使用
$sql="SELECT * FROM table WHERE `date` BETWEEN '$year-01-01' AND '$year-12-31'"
作为一般规则:如果您可以在常数计算和字段计算之间进行选择,请使用前者。
【讨论】:
WHERE `date` LIKE '$year-%'.
EXPLAIN 时,我得到了相同的执行计划。看来 MySQL 足够聪明,可以找出日期。
从 DATEPART(YEAR,[DATE])=2012 的表中选择 *
【讨论】: