首页 > 解决方案 > 如何通过输入id获取DateDiff,同时进行SQL查询?

问题描述

我的数据库表

我当前的代码是..

SELECT DATEDIFF(DAY, Return_Date , Submit_Date )FROM Issue WHERE Book_ID = ?

但它显示一个错误,说“调用本机函数'DATEDIFF'时参数计数不正确”

完整代码是

    Connection conn;
    Connct readerconn = new Connct();
    conn =readerconn.getConnection();
    
    
       try{
        String query = "SELECT DATEDIFF(Return_Date , Submit_Date) FROM issue WHERE Book_ID = ?" ;
        Double diff=null;

        PreparedStatement pstnt=conn.prepareStatement(query);           
        pstnt.setInt(1, Integer.parseInt( jTextField4.getText()));
        
        try (ResultSet rs = pstnt.executeQuery( query ) ;) {
        while ( rs.next ( ) ) {
            diff = rs.getDouble( 1 ) ;
            
            if(diff<=7){
                Double fine=diff-7*10;
                fine = Double.valueOf(jTextField1.getText());
                
            }
            else{
                showMessageDialog(null,"No Fine");                   
            }
        }
                    
        
        } catch ( SQLException ex ) {
            Logger.getLogger(ReturnNFines.class.getName()).log(Level.SEVERE, null, ex);
            showMessageDialog(null,"Error"); 
        }

        
    } catch (SQLException ex) {
        Logger.getLogger(ReturnNFines.class.getName()).log(Level.SEVERE, null, ex);
        showMessageDialog(null, "Failed");
    }

我试图从 JText 文件中获取他的 id 并查找具有输入 id 的行的 DateDiff,

标签: javamysqlsqlmariadbdate-arithmetic

解决方案


错误消息表明您正在使用 MySQL/MariaDB。在此数据库中,函数datediff()仅接受两个参数,即两个日期(或类似日期)。

所以:

select datediff(return_date , submit_date) from issue where book_id = ?

请注意,该函数实际上计算两个参数之间存在多少天边界,如果您的参数具有时间分量,则可能(或许多不是)是您所期望的;通常,DATEDIFF('2007-12-31 23:59:59','2007-12-30')1

如果您想要将 24 小时的间隔视为一天的计算,您可以使用timestampdiff()和 算术,如下所示:

timestampdiff(second, submit_date, return_date) / 60 / 60 / 24

这为您提供了十进制天数的日期差异。


推荐阅读