2

db2のタイムスタンプデータ型を照会したい。以下にクエリを書きました

Select * from sample where LASTMODIFIEDDATE = timestamp('2012-04-03 07:59:50')

上記のクエリで結果が得られなかったので、試してみました

Select * from sample where LASTMODIFIEDDATE > timestamp('2012-04-03 07:59:50')

上記のクエリでは、タイムスタンプ「2012-04-03 07:59:50」に加えて、タイムスタンプの値が大きい場合、たとえば「2012-04-0308:59:50」に一致する結果が得られました。

'>'演算子の結果を取得している場合、' ='演算子の結果を取得していないのはなぜですか?何か理由がありますか、それとも間違ったクエリを書いていますか?

ありがとう !

4

2 に答える 2

6

いいえ、DB2は、秒の小数部を含むタイムスタンプの完全な値を格納します。システムがタイムスタンプを表示する形式をミリ秒を含む形式に変更することをお勧めします。

代わりにこれを使用してみてください:

SELECT * 
FROM Sample
WHERE lastModifiedDate >= TIMESTAMP('2012-04-03 07:59:50')
AND lastModifiedDate < TIMESTAMP('2012-04-03 07:59:50)' + 1 SECONDS

ミリ秒を含むタイムスタンプの完全な値がない限り、範囲を取得することになります。データの範囲にアクセスするときは、「下限を含む、上限を除く」を使用してください。

于 2012-06-25T19:16:22.623 に答える
0

また、db列の値を秒のみに切り捨ててから、文字列との比較を実行することもできます。

Select * from sample where TRUNC(LASTMODIFIEDDATE, 'SS') = '2012-04-03 07:59:50'

DB210.5で動作します。次の方法で切り捨てることもできます。

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

例:

Select * from sample where TRUNC(LASTMODIFIEDDATE, 'HH') = '2012-04-03 07:00:00'
Select * from sample where TRUNC(LASTMODIFIEDDATE, 'MI') = '2012-04-03 07:59:00'
于 2018-06-19T20:54:09.893 に答える