MySQL date_format() 函数 vs SQL Like 运算符

Posted

技术标签:

【中文标题】MySQL date_format() 函数 vs SQL Like 运算符【英文标题】:MySQL date_format () function vs SQL Like operator 【发布时间】:2019-11-14 13:09:35 【问题描述】:

表:items_ordered

customerid  order_date  item    quantity    price
10330   30-Jun-1999 Pogo stick  1   28.00
10101   30-Jun-1999 Raft    1   58.00
10298   01-Jul-1999 Skateboard  1   33.00
10101   01-Jul-1999 Life Vest   4   125.00
10299   06-Jul-1999 Parachute   1   1250.00
10339   27-Jul-1999 Umbrella    1   4.50

我有这样的问题 "选择 12 月份购买的所有订购商品的平均价格?"

这是针对 mysql 的,我已经尝试使用 SQL LIKE 运算符来解决它。

select avg ( price)
from items_ordered
where order_date like ('%Dec%')

但是,我正在考虑使用 date_format 解决此问题的另一种方法:

select avg ( price)
from items_ordered
where date_format ( order_date, %M) = 'Dec'

我的问题是我们什么时候应该在 SQL 中使用 date_format 函数?对于这个问题,哪一个解决得更快?

【问题讨论】:

使用适当的数据类型会更快; LIKEDATE_FORMAT() 都消除了利用索引或使用任何基于日期的内置功能的可能性。 【参考方案1】:

不要将LIKE 用于日期! LIKE字符串 的运算符,日期不是字符串。 MySQL 有一堆内置函数可以满足您的需求。

如果您想要所有 12 月的数据,请使用 month()

where month(order_date) = 12

如果您需要单个 12 月的数据,请使用日期比较:

where order_date >= '2018-12-01' and order_date < '2019-01-01'

特别是,对于一系列日期,直接比较可以利用索引。

【讨论】:

在使用范围比较时提到使用可能存在的索引及其对查询性能的提升是问题第二部分的专业提示。

以上是关于MySQL date_format() 函数 vs SQL Like 运算符的主要内容,如果未能解决你的问题,请参考以下文章

MySql DATE_FORMAT函数用法

MySQL DATE_FORMAT() 函数

HGDB兼容MySQL date_format函数

HGDB兼容MySQL date_format函数

mysql DATE_FORMAT(date, format) 函数

mysql date_format()函数