web-dev-qa-db-ja.com

DB2タイムスタンプ選択ステートメント

次のように、タイムスタンプに基づいてデータを取得する簡単なクエリを実行しようとしています。

SELECT * 
FROM <table_name> 
WHERE id = 1 
AND usagetime = timestamp('2012-09-03 08:03:06') 
WITH UR;

これはレコードを私に返さないようですが、このレコードはデータベースにid = 1で存在します。

ここで何が悪いのですか?

列の使用時間のデータ型は正しく、タイムスタンプに設定されています。

7
Vivek

@bhambyは正しいです。マイクロ秒をタイムスタンプ値から外すと、クエリは2012-09-03 08:03:06.000000の使用時間でのみ一致します

前のクエリから取得した完全なタイムスタンプ値がない場合は、その時間のマイクロ秒の値に一致する範囲述語を指定できます。

...WHERE id = 1 AND usagetime BETWEEN '2012-09-03 08:03:06' AND '2012-09-03 08:03:07'

または

...WHERE id = 1 AND usagetime >= '2012-09-03 08:03:06' 
   AND usagetime < '2012-09-03 08:03:07'
21
Fred Sobotka

文字列形式と比較するときに、列でTRUNC関数を使用すると、ミリ秒ではなく、秒までしか比較されません。

SELECT * FROM <table_name> WHERE id = 1 
AND TRUNC(usagetime, 'SS') = '2012-09-03 08:03:06';

分や時間なども可能な場合は、「SS」の代わりに適切な表記を使用してください。

hour ('HH'), minute('MI'), year('YEAR' or 'YYYY'), month('MONTH' or 'MM'), Day ('DD')
1
JavaTec