1

ここにこのサンプルステートメントがあります:

WHERE e.modified_date::DATE between '2013-04-02'::DATE
AND '2013-04-02'::DATE

注:
これらの日付は実際には変数でした。

pgAdmin でこれを実行すると、次のサンプル テーブルが生成されます。

username  modified_date
Sample     2013-04-02
Sample1    2013-04-02

これが私の望む結果です。

ただし、Java から proc を呼び出すと、何も起こりません。2 番目の日付を変更すると、前のサンプル テーブルが返されます。2番目の変数よりも小さい場合、PostgreSQLは日付を評価しているようです。何か不足していますか?

注:modified_dateですtimestamp

4

1 に答える 1

2

列の詳細:

modified_date:TIMESTAMP

modified_dateフィールドに挿入された実際の値は次のとおりです

タイムゾーンなしのmodified_date
タイムスタンプ

2013-04-02 14:05:45.8611
2013-04-02 14:09:14.5422

WHEREの句を含むテスト手順の理由の簡単な説明

WHERE e.modified_date >= '2013-04-02'::TIMESTAMP 
AND e.modified_date <='2013-04-02'::TIMESTAMP

何も返さない: -値をデータ型に

キャストすると、次のようになります。 - 最初に、句は、フィールド(値を参照) が より大きいか等しいかどうかを検証します。一方、これは次のように返されます - 第二に、句は以下のフィールド (値を参照) を検証します。として返されますString'2013-04-02'TIMESTAMP'2013-04-02 00:00:00'
WHEREmodified_date'2013-04-02 00:00:00'false
WHEREmodified_date'2013-04-02 00:00:00'false

この説明は、文が句SELECTに対応する値を返すことを示しているだけです。WHEREmodified_date'2013-04-02 00:00:00'

このWHERE条項については、次のとおりです。

WHERE e.modified_date::DATE BETWEEN '2013-04-02'::DATE
AND '2013-04-02'::DATE


modified_dateString値の 両方をDATEデータ型にキャストすると、次の値になります。
modified_dateas TIMESTAMP= '2013-04-02 14:05:45.8611'
modified_dateas DATE= '2013-04-02'

modified_dateas TIMESTAMP= '2013-04-02 14:09:14.5422'
modified_dateas DATE= '2013-04-02'

String valueas STRING= '2013-04-02'
String valueas DATE='2013-04-02'

注:これは、値をデータ型
にキャストせずに行うこともできます。私の側でのキャストは、私の検証目的のためでした。 私の質問に答えるには、次の条項を使用します。StringDATEString

WHERE

WHERE e.modified_date::DATE between '2013-04-02'::DATE
AND '2013-04-02'::DATE

何も返さないのは、間違ったWHERE句を使用するテスト ストアド プロシージャを呼び出しただけです。

于 2013-04-11T02:02:15.310 に答える