【问题标题】:Sql search Result between two dates两个日期之间的sql搜索结果
【发布时间】:2019-01-09 07:50:40
【问题描述】:

我有一个表名预期费用,其中我有 4 列名称 Expense_title、Amount、expense_category、日期,所有 4 列都有 var char 类型。当我尝试查找两个日期之间的费用时,它在同一年可以正常工作,例如2018 年 11 月 27 日和 2018 年 12 月 27 日,但是当我尝试查找两年之间的费用时,它没有得到任何结果,例如2018 年 12 月 27 日和 2019 年 1 月 27 日。请帮忙

我正在尝试这个查询

SELECT *
from expected_expense
WHERE Date BETWEEN '$start_date' AND '$end_date'

【问题讨论】:

  • 您使用的是什么 DBMS?考虑将日期转换为实际的 date 类型。
  • 我正在使用 mysql
  • 所有 4 列都有 var char 类型。这是错误的。数据类型的存在是有原因的。
  • 日期类型为 varchar
  • 使用正确的date数据类型,问题就解决了!

标签: mysql sql ajax


【解决方案1】:

根据 cmets,这是因为 varchar 类型。

between 运算符与对其范围限制执行两个封闭不等式没有什​​么不同。在你的例子中, between 12/27/2018 And 01/27/2019

将在内部更改为

>= 12/27/2018 and <= 01/27/2019

但这些不是日期,它们是文本。第二个小于第一个,所以不会返回任何内容。这就像问一个问题:哪个字母在 q 之后但在 b 之前?没有。

要么将字段更改为日期时间,要么在查询中使用转换函数。

【讨论】:

  • 要么将字段更改为日期时间,要么不要使用关系数据库
  • 你为什么要评论这个答案?
  • 因为我不同意你答案的最后一句话,否则是正确的
  • 虽然我同意直接在模式中使用 datetime 从黑盒的角度来看是首选的做法,但人们永远无法知道问题背后的情况。也许 op 没有架构修改权限。也许这是最初确实是datetime 字段的视图。可能因为某些数据桥而存在字符。
猜你喜欢
  • 2021-04-23
  • 2020-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 2023-04-08
  • 2012-08-14
相关资源
最近更新 更多