1

Register テーブルから 1 か月の日数を取得する必要があります。次のSQLクエリを使用しています:

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

PostgreSQL Im の SQL Editor で実行すると、次の結果が得られます。 ここに画像の説明を入力

Javaコードを介して同じことを実行している間、 ここにJavaコードを追加する29 days代わりに結果を取得します29

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();
    }

何が原因でしょうか..?29Javaの実行から取得する必要があります。どうやって手に入れますか..?前もって感謝します。

4

3 に答える 3

0

Postgres は、integertwo を引くと確かに an を返します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 に答える