gpt4 book ai didi

mysql - SQL日期格式和引用混淆

转载 作者:可可西里 更新时间:2023-11-01 07:49:38 25 4
gpt4 key购买 nike

我有如下测试记录:

enter image description here

以下查询结果为 0 条记录:

SELECT * FROM `events_dates` WHERE `start_date` = 21-12-2014

但以下查询结果为 1 条记录:

SELECT * FROM `events_dates` WHERE `start_date` > 21-12-2014

我对此有点困惑。

作为附带问题:如果我不使用时间字段,可以使用“日期”类型吗?还是您仍然愿意选择使用“日期时间”?

最佳答案

您必须以 'YYYY-MM-DD' 格式对日期文字进行单引号。否则,MySQL 正在解释的是算术表达式(整数减法):

21 - 12 - 2014 = -2005

负整数 -2005 被转换为有效的日期值 0000-00-00 00:00:00,这解释了为什么您的查询使用 > 返回一行。

正确的 SQL 表达式应该是:

SELECT * FROM `events_dates` WHERE `start_date` = '2014-12-21'

关于 DATE 类型而不是 DATETIME 的使用,是的,如果您知道您永远不打算使用它,我认为可以在没有时间部分的情况下使用它次。不过,我承认,大多数时候,我确实使用 DATETIME 来实现 future 的可扩展性。这实际上取决于您 future 的需求。

如果担心优化存储空间以避免使用 DATETIME 存储时间,请在担心优化之前考虑该表有多大潜力变得非常大(它必须是 < em>真的很重要)。如果您确实使用 DATETIME,您可能会发现自己经常使用 DATE() 函数在查询时截断值。我认为这只是一个非常小的不便。

如果 start_dateDATETIME 列,则相同的查询可以使用 DATE() 截断时间段:

SELECT * FROM `events_dates` WHERE DATE(`start_date`) = '2014-12-21'

关于mysql - SQL日期格式和引用混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27605382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com