我在 Stackoverflow 上回答了一个问题。
这是关于仅获取列的日期(不包括时间)DATETIME
,以使用BETWEEN
.
可以通过以下方式获取该日期:
- 使用
DATE
:SELECT DATE(col_fecha) fecha;
- 使用
DATE_FORMAT
:SELECT DATE_FORMAT(col_fecha,'%Y-%m-%d') fecha;
一个或另一个功能的使用是否存在差异,例如在性能方面?
MySQL 文档没有说明任何内容,因此我对此表示怀疑。
我在 Stackoverflow 上回答了一个问题。
这是关于仅获取列的日期(不包括时间)DATETIME
,以使用BETWEEN
.
可以通过以下方式获取该日期:
DATE
:SELECT DATE(col_fecha) fecha;
DATE_FORMAT
:SELECT DATE_FORMAT(col_fecha,'%Y-%m-%d') fecha;
一个或另一个功能的使用是否存在差异,例如在性能方面?
MySQL 文档没有说明任何内容,因此我对此表示怀疑。
查阅MySQL 源码中的转换函数 from
DATETIME
toDATE
反之亦然,可以看出,将字段转换为DATETIME
字段DATE
很简单,只需更改类的一个属性,MYSQL_TIME
工作就完成了:TIME
从到 的示例转换DATETIME
:DATETIME
混合数据和的示例TIME
:最后一步稍微复杂一些,因为如果有负小时数或 24 小时范围之外的小时数,则会重新计算日期。
链接到日期和时间格式解析函数(
parse_date_time_format
)。经验证据:
可以进行实证检验来检查假设是否正确(参见在线证明):
结果:
可以看出,获取正常数据和使用函数处理的数据几乎没有任何明显差异
DATE()
(即使在 5 个结果的样本中,使用DATE
),但使用函数时存在更显着的差异DATE_FORMAT()
。简而言之:在解析查询结构、解析流程等的开销之后,最终日期数据转换比任何调用具有额外开销的函数的调用都快得多,该函数具有必须返回的文本格式的计算额外开销。
我认为
Date()
:SELECT DATE(col_fecha) fecha;
比使用更快DATE_FORMAT
,即。当您使用 时
Date()
,您没有传递参数,而是定义了格式,相反,Date_format()
它必须评估每个记录的日期格式,无论您想要什么,它都会变慢,而且它会是在大数据范围内注意到。Date_format()
它的优点Date()
是您可以自己定义格式,Date
因此它不允许您选择它。我澄清这是我自己的推论,我可能是错的。