【问题标题】:SQL query to get records from specified monthsSQL查询获取指定月份的记录
【发布时间】:2015-03-23 08:06:12
【问题描述】:

以下是来自表 trail_db 的数据

id   | Name | months     | salary
_________________________________________
1    | abc  | April-2014 | 200.00
2    | pqr  | May-2014   | 200.00
3    | lmn  | June-2014  | 200.00
        ...
11   | cvb  | Feb-2015   | 200.00
12   | sdg  | Mar-2015   | 200.00

如何选择从 2014 年 4 月到 2015 年 3 月的记录。

我试过查询,

从 trail_db 中选择 *,其中“2014 年 4 月”和“2015 年 3 月”之间的月份

但它不能正常工作。哪个 SQL 查询有效?...

【问题讨论】:

  • 月份列是什么类型的?
  • 它是 varchar,因为我将月份和年份插入到单个列中。
  • 当我使用上面的 sql 查询时,它没有显示 May-2014、Sep-2014、Oct-2014、Nov-2014 的记录。我没有收到错误。请帮帮我。
  • 这是一个糟糕的数据库设计,您应该使用 mysql 原生数据类型 date,datetimetimestamp 存储日期
  • 哦..是的,抱歉,现在我将更改数据库设计并重试。@Abhik Chakraborty

标签: mysql sql


【解决方案1】:

这应该可行:

Select *
from trail_db 
where STR_TO_DATE(months,'%M-%Y') + 1
  between STR_TO_DATE('April-2014','%M-%Y') + 1
  and STR_TO_DATE('Mar-2015','%M-%Y') + 1
order by STR_TO_DATE(months,'%M-%Y') + 1;

Sample SQL Fiddle

但是您不应该以这种方式存储日期类型的数据;最好将其存储为正确的日期并在查询中提取您需要的部分并让前端处理格式。

【讨论】:

  • 您的查询对我有用,谢谢..,但有一些修改为“SELECT * FROM creche_unit_expen WHERE STR_TO_DATE(month, '%M-%Y') BETWEEN STR_TO_DATE('April-2014' , '%M-%Y' ) AND STR_TO_DATE( 'Mar-2015', '%M-%Y' ) ORDER BY STR_TO_DATE( 月, '%M-%Y' )"
  • @VijayaSavant 我也试过那个版本,但是 str_to_date 函数返回了上个月的最后一个日期,这就是我添加 +1 的原因。结果似乎确实是一样的。看到这个:sqlfiddle.com/#!9/43709/22
  • @jaw,当我按原样使用您的查询时,我遇到了与您在删除 +1 后遇到的问题相同的问题。为什么会这样?我正在研究 phpmyadmin
  • @VijayaSavant 我不知道 MySQL 为什么要这样做;我猜这是设计使然,但我在手册中没有看到任何可以解释的内容。
【解决方案2】:

您必须将您的 varchar 转换为日期(使用您使用的格式),然后您可以比较它(否则比较是字典)

"Select * from trail_db where STR_TO_DATE(months, '%M-%Y') between 'April-2014' and 'Mar-2015'";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多