【问题标题】:How to do the SELECT with a Variables in MySQL?如何在 MySQL 中使用变量进行 SELECT?
【发布时间】:2015-07-28 12:34:47
【问题描述】:

我有一张桌子myTable

   Id       userID  month year login day
   1628325  812467  1     2015  1    6
   1628326  969054  1     2015  2    9
   1628327  812467  2     2015  1    27
   1628328  811602  2     2015  1    27
   1628329  952056  3     2015  3    2
   1628330  1082029 3     2015  5    2
   1628337  952056  3     2015  1    3
   1628338  952056  3     2015  6    4
   1628339  812467  3     2015  2    4
   1628340  1082029 3     2015  2    4
   1628341  811602  3     2015  4    4
   1628349  1081988 3     2015  1    4

我需要按日期计算登录总数。 我有 2 个传入变量:startDate 和:endDate。所以 select 应该是这样的:

SELECT DATE_FORMAT(Date, '%Y/%m/%d') "Day", sum(login) FROM myTable WHERE Date >=:startDate AND Date<:endDate ORDER BY Date DESC

如何实现?

变量来自jsppage

从 Eclipse 的调试模式中,我可以看到来自 jsp 页面的 :startDate 和 :endDate 变量 - 具有以下格式:

2015 年 7 月 1 日星期三 00:00:00 EEST,2015 年 7 月 28 日星期二 00:00:00 EEST

当我运行报告时,它没有显示任何内容。时间格式表示可能有问题吗? (%y-%m-%d) 或 (%y/%m/%d) 或 ..

【问题讨论】:

  • ara 变量从何而来?
  • 你也必须使用 group by
  • 阅读java中的prepared statements
  • 应该只在SQL中,用于MyBatis迁移:向上

标签: mysql sql select


【解决方案1】:

您可以从组件中构造一个日期。一种方法是使用str_to_date()。但是,您确实应该将日期存储为日期,而不是单个组件。 MySQL 对日期有很好的支持,所以你应该使用数据库的这些特性。

这是一种方法:

SELECT str_to_date(concat_ws('-', year, month, day), '%Y-%m-%d') as date, sum(login)
FROM myTable
WHERE str_to_date(concat_ws('-', year, month, day), '%Y-%m-%d') >= :startDate AND
      str_to_date(concat_ws('-', year, month, day), '%Y-%m-%d') < :endDate 
GROUP BY date
ORDER BY date;

需要更多处理但更容易编写的替代方法是使用having

SELECT str_to_date(concat_ws('-', year, month, day), '%Y-%m-%d') as date, sum(login)
FROM myTable
GROUP BY date
HAVING date >= :startDate and date < :endDate
ORDER BY date;

效率较低,因为它在聚合整个表之后过滤数据。

【讨论】:

  • 非常感谢您的回答!
猜你喜欢
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 1970-01-01
相关资源
最近更新 更多