1

我需要从 Register 表中获取一个月的天数。我使用以下 SQL 查询:

SELECT DateTo::Date-DateFrom::Date AS DaysInMonth FROM Register;

在 PostgreSQL 的 SQL 编辑器中执行它时,我得到以下结果: 在此处输入图像描述

通过 java 代码执行相同的操作时,我得到了结果,29 days而不是29 在此处添加 java 代码

sql = " SELECT DateTo::Date-DateFrom::Date AS DaysInMonth FROM Register; "                  
    PreparedStatement pstmt = null;
    ResultSet rs = null;                
    try {
        pstmt = DB.prepareStatement(sql, null);
        pstmt.setInt(1, payReg.getC_Period_ID());
        rs = pstmt.executeQuery();                      
        while (rs.next()){                          
            System.out.println(rs.getString("DaysInMonth"));
        }
    }catch (SQLException e){
        e.printStackTrace();
    }

可能是什么原因..?我只需29要从 java 执行中获取。我怎么得到它..?提前致谢。

4

3 回答 3

2

尝试这个.. DATE_PART('days',DATE_TRUNC('month', DateTo) - DATE_TRUNC('month', Datefrom)) as DaysInMonth

于 2013-10-08T07:42:45.907 回答
0

你试过了吗

rs.getInt("DaysInMonth")

代替

rs.getString("DaysInMonth")

正如您所期望的那样。

于 2013-10-08T07:06:35.153 回答
0

integer减去 2 时,Postgres 肯定会返回 a dates。看起来演员阵容没有发生。我怀疑::PostgreSQL 中的特定语法DateTo::Date在您的客户端中具有特殊含义。尝试使用 SQL标准语法进行强制转换

还展示了更好的方法来...

...获取一个月的天数

EXTRACT(day FROM cast(DATE_TRUNC('month'
                                  ,now() + interval '1 month') AS date) - 1);

更好的是,使用这个更简单、更快速的表达式,根本不需要强制转换:

EXTRACT(day FROM DATE_TRUNC('month', now()) + interval '1 mon - 1 day');

临时设置log_statement = ALL并检查 Postgres DB 日志中服务器实际获取的内容。

于 2013-10-08T07:51:52.423 回答