14

DB2 テーブルに DB2 DATE タイプのフィールドがあります。日付フィルターでデータを選択したい。例えば:

SELECT *
FROM   table
WHERE registrationdate > '2002-10-01';

上記のクエリから、登録日が「1943-10-01」から始まるレコードが取得されますが、これは正しくありません。

これらも機能しません:

registrationdate > date('2002-10-01')
date(registrationdate) > date('2002-10-01')
date(registrationdate) > '2002-10-01'

日付を比較するにはどうすればよいですか?

4

4 に答える 4

19

DATE リテラルの SQL 標準形式は次のとおりです。

DATE '2002-10-01'

少なくとも、試してみる価値はあります:

SELECT *
  FROM table
 WHERE registrationdate > DATE '2002-10-01';
于 2012-05-28T17:17:05.587 に答える
6

再起動後にデータベースが機能し始めたので、データベースに関する他のいくつかの問題を調査したため、これは正しく機能するようになりました。

registrationdate > '2002-10-01'
于 2012-05-29T11:06:34.547 に答える
4

日付に使用されるデフォルトの形式は、DB2データベースの地域コード (データベースの作成時に指定できます) によって決まります。たとえば、私のデータベースは、territory=US を使用して作成されました。したがって、日付形式は次のようになります。

values current date 
1 
---------- 
05/30/2003 

1 record(s) selected.

DB CFG から地域コードを取得できます。

db2 get db cfg | egrep 'code|territory'
 Database territory                                      = US
 Database code page                                      = 1208
 Database code set                                       = UTF-8
 Database country/region code                            = 1

つまり、形式はMM/DD/YYYYです。形式を変更したい場合は、db2 ユーティリティー・パッケージのコレクションをバインドして、別の日付形式を使用できます。

SQL を使用して現在の日付、時刻、およびタイムスタンプを取得するには (基本的に、日付形式が何であるかがわかります)、適切な DB2 レジスタを参照します。 DB2 レジスターの値

db2 "SELECT current date FROM sysibm.sysdummy1 "

1
----------
06/02/2014

  1 record(s) selected.

関数内の引用符を省略しても DATE 関数は機能しますが、結果は正しくありません。

db2 "SELECT date(2001-09-22) FROM sysibm.sysdummy1 "

1
----------
05/24/0006

  1 record(s) selected.

DATE 関数は、入力として文字列を取得すると、それが DB2 日付の有効な文字表現であると想定し、それに応じて変換します。対照的に、入力が数値の場合、関数はそれが現在の紀元の開始から 1 を引いた日数 (つまり、0001-01-01) を表していると想定します。上記のクエリでは、入力は 2001-09-22 で、これは (2001-9)-22 に等しく、1970 日に相当します。

上記のすべてが該当する場合、以下のコマンドは問題に対して正常に機能するはずです。

SELECT * FROM table WHERE registrationdate > '10/01/2002';

于 2014-06-02T13:32:04.973 に答える