次のように、タイムスタンプに基づいてデータを取得する簡単なクエリを実行しようとしています。
SELECT *
FROM <table_name>
WHERE id = 1
AND usagetime = timestamp('2012-09-03 08:03:06')
WITH UR;
これはレコードを私に返さないようですが、このレコードはデータベースにid = 1で存在します。
ここで何が悪いのですか?
列の使用時間のデータ型は正しく、タイムスタンプに設定されています。
@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'
文字列形式と比較するときに、列で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')