查询以选择某些条件为真的两个日期之间的列的总和

Posted

技术标签:

【中文标题】查询以选择某些条件为真的两个日期之间的列的总和【英文标题】:Query to select the sum of a column between two dates where some condition is true 【发布时间】:2017-01-14 06:54:50 【问题描述】:
        ResultSet rs1 = state.executeQuery("select sum(bill_total) as bill_total"
                      + " from t_report where date between ? and ? AND  mode_of_payment='Cash' ");
        PreparedStatement pst1 = conn.prepareStatement(sql);
        pst1.setString(1, date1.getText());
        pst1.setString(2, date2.getText());
        while(rs1.next())
        cash_label.setText(rs1.getString("bill_total"));
        

我试过这个查询,但它不起作用。我收到错误:“?”附近的语法不正确 在这两个条件中,只有付款方式条件有效,而日期条件无效。

【问题讨论】:

任何错误或结果? 错误是“''附近的语法不正确?' " 您是否完全按照问题运行此查询? 有什么问题?你没有得到结果或错误的结果吗? sqlsrv_prepare函数中?s的实际参数你提供了吗? 可以替换吗?分别使用 0 和 1。 【参考方案1】:

你可以试试这个:

pst1.setDate(1, new java.sql.Date(date1.getTime()));
pst1.setDate(2, new java.sql.Date(date2.getTime()));

【讨论】:

我在使用 java 和 netbeans。 从 c# 编辑到 java @Mohit date1 和 date2 是从中检索日期的文本字段。我不能将 getTime() 与 date1 和 date2 一起使用。 试过这个:new java.sql.Date(date2.getText()) ?【参考方案2】:

我尝试过这样的事情 这是我的数据库结构

CREATE TABLE bill_total2(bill_total integer,mode_of_payment string,date1 datetime);

/* Create few records in this table */
INSERT INTO bill_total2 VALUES(1,'cash','12-12-2016 00:00:00');
INSERT INTO bill_total2 VALUES(2,'cash','12-12-2016 00:00:00');
INSERT INTO bill_total2 VALUES(3,'cash','12-12-2016 00:00:00');
INSERT INTO bill_total2 VALUES(4,'cash','12-12-2016 00:00:00');
INSERT INTO bill_total2 VALUES(5,'cash','12-12-2016 00:00:00');

我的查询是

SELECT sum(bill_total) FROM bill_total2 
WHERE date1 BETWEEN '12-12-2016 00:00:00' AND '12-12-2016 00:00:00'
AND mode_of_payment='cash';

这对我来说很好用。

【讨论】:

那么你为什么认为它在我的代码中不起作用。我不能像你那样直接输入日期,因为它是从前端检索的。 正如我在评论中所说,更改列日期的名称是保留字。我插入该数据仅用于测试目的。【参考方案3】:

您在设置参数之前执行查询!请试试这个:

String sql = "select sum(bill_total) as bill_total"
          + " from t_report where date between ? and ? AND  mode_of_payment='Cash' ");
PreparedStatement pst1 = conn.prepareStatement(sql);
pst1.setString(1, date1.getText());
pst1.setString(2, date2.getText());
ResultSet rs1 = pst1.executeQuery();
while(rs1.next())
    cash_label.setText(rs1.getString("bill_total"));
 

【讨论】:

谢谢兄弟。这是一个愚蠢的错误。查询现在运行良好。【参考方案4】:

试试这个查询:

SELECT SUM(bill_total) AS bill_total FROM t_report WHERE (date BETWEEN to_date('01/01/2015','dd/mm/yyyy') and to_date('01/01/2017','dd/mm/yyyy') ) AND  (mode_of_payment='Cash')

【讨论】:

我刚刚在查询中添加了括号,因为我需要动态获取日期,但它仍然给出了同样的错误:'?' 附近的语法不正确@user7414515

以上是关于查询以选择某些条件为真的两个日期之间的列的总和的主要内容,如果未能解决你的问题,请参考以下文章

使用 sequelize 将 datetime 转换为 where 条件下的列的日期

SQL查询选择年份在两个日期之间的行

SQL查询以选择两个日期之间的日期

SQL查询以在给定条件下明确获取总和

找到两个日期之间的金额总和

CakePHP 查找两个日期之间查询的条件