【问题标题】:SQL plages de dates [closed]SQL 日期 [关闭]
【发布时间】:2025-11-27 18:40:01
【问题描述】:

我问自己为什么会有这个要求

SELECT * FROM world.city WHERE '20181109' > datedebut  and '20181109' < datefin;

不返回与此相同的结果

SELECT * FROM world.city WHERE  datedebut < 20181109 < datefin;

最后一个选择语句不是有效的 SQL,但在数学上它是最优解

【问题讨论】:

  • bienvenue á *。 s'il vous plait,提出 vos 问题 a cette site en anglais...
  • 这个问题是否违反了任何*规则? - 如果是,则给出链接并准确说明哪个
  • 您似乎已经回答了自己的问题
  • @KamilKiełczewski 来自这个:meta.*.com/questions/297673/…“请不要为 OP 翻译问题。”
  • 我觉得标题还是需要翻译的。

标签: mysql


【解决方案1】:

对于每个运算符(即 &lt;&gt; ),必须有不同的右侧和左侧。

当您编写datedebut &lt; 20181109 &lt; datefin 时,它会被解析为datedebut &lt; 20181109,并将比较结果发送给下一个运算符。

编写 SQL 与编写数学时,您需要以不同的方式思考。您可以争辩说两种“语言”都有解析器,但它们略有不同。

编辑评论: 正如我在 cmets 中了解到的那样,我最初的答案并不完全正确,因为这会导致解析错误。本质是正确的:您的查询没有按预期进行解析。

正如其他人已经回答的那样,如果您想要更简洁的答案,您需要使用 BETWEEN 关键字而不是 &lt;&gt; 运算符。

【讨论】:

  • 这实际上是不正确的。 MySQL 将 a &lt; b &lt; c 解析为 (a &lt; b) &lt; c,因此它比较 a 和 b 并得到真或假,在数字上下文中是 1 或 0。然后将该值与 c 进行比较以获得操作结果。例如1&lt;2&lt;3 = 1.
【解决方案2】:

有一个 MySQL 表达式语法更接近您的第二种形式,即BETWEEN

SELECT * FROM world.city WHERE '20181109' BETWEEN datedebut AND datefin

【讨论】: