【问题标题】:Select in calendar with concat and between在日历中选择 concat 和 between
【发布时间】:2013-11-27 17:04:15
【问题描述】:

我有一个名为 calendar 的表,在该表中我有以下行: -天 -月 -年

为什么?因为我需要它嘿嘿。

所以,问题是当我想搜索不同年份的日期时(在同一年就可以了),例如:

介于 31-12-2013 和 1-1-2014 之间的天数,所以我有一个疑问:

SELECT * FROM calendar WHERE concat(year,'-',month,'-',day) BETWEEN '2013-1-30' AND '2013-1-31';

但是,这个查询在同一年搜索并显示另外几个月(我的数据库中有 730 天)而不是 2014 年。

所以,我很困惑,因为如何连接行并在它们之间进行搜索? 希望你能帮助我理解,对不起我的英语。

谢谢大家。!!

【问题讨论】:

  • 这取决于您输入的数据类型!日期或字符串!
  • 你能扩展你的问题吗?您想搜索“不同年份的日期”吗?一个日期,一个日期范围??

标签: mysql concat between


【解决方案1】:

使用str_to_date:

SELECT * FROM calendar 
WHERE str_to_date(concat(year,'-',month,'-',day),'%Y-%m-%d') 
          BETWEEN '2013-1-30' AND '2013-1-31';

sqlfiddle demo

【讨论】:

  • 谢谢,它有效!但正如我评论的那样,当我运行查询时,这也显示了另外几个月(也显示我需要的信息),我该如何回答我的查询我不想再看到这几个月了。
  • @SundayGirl。这不能显示其他月份。在此查询之外,您必须有一些奇怪的东西弄乱了您的结果。你能在sqlfiddle 中展示你的桌子,看看它在做什么吗?
  • @SundayGirl。看看这个小提琴,看看它在两年内工作:sqlfiddle.com/#!2/bbac06/1
  • 我知道这很奇怪,因为我编辑了 sql fiddle 中的值,并根据需要显示结果,但在我的 mysql local 中结果不同。让我做一些测试,然后告诉你发生了什么。谢谢!!
  • 哈哈,我不知道发生了什么,但是我的mysql本地终于可以工作了!!谢谢大家!! :)
【解决方案2】:

试试

SELECT * FROM calendar WHERE DATE(CONCAT(year,'-',month,'-',day)) BETWEEN '2013-1-30' AND '2013-1-31';

我也很好奇为什么您“需要”将年、月和日存储为三个单独的字段,而不是存储在单个日期字段中?

我认为年月日也可能是mysql中的保留关键字,所以你可能不得不这样做

SELECT * FROM `calendar` WHERE DATE(CONCAT(`year`,'-',`month`,'-',`day`)) BETWEEN '2013-1-30' AND '2013-1-31';

【讨论】:

  • 谢谢,正如我在同一年搜索时评论的那样,它有效,但不同年份的结果不同,我的意思是,显示我需要的结果,但也显示另一个月份这是不必要的。不过谢谢你的回答!
  • 你能发布你正在使用的数据吗?我的代码应该可以工作(就像 Filipe Silva 的一样)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 2019-11-22
  • 1970-01-01
相关资源
最近更新 更多