2

いくつかの情報とタイムスタンプが保存されているHSQLDBテーブルがあります

10月の午前0時から午後5時までのすべての情報など、特定の期間の情報を選択したいと思います。

mysql'ones DATE(myfield)やTIME(myfield)のような、私が望むものに最適な関数は見つかりませんでした。

SELECT * FROM myTable 
WHERE DATE(myField) BETWEEN '2012-10-01' AND '2012-10-30' 
AND TIME(myField) BETWEEN '00:00:00' AND '17:00:00'

私が見つけたのは、関数YEAR()、DAYOFMONTH()、DAYOFYEAR()、HOUR()、およびMINUTE()を使用することだけですが、他にもっと簡単な解決策はないかと思いました。

4

1 に答える 1

4

HSQLDB はこの目的のために一般的な CAST 式をサポートしているため、そのような特殊な関数は必要ありません。

CAST(myField AS DATE)
CAST(myField AS TIME)

HSQLDB は、DATE から TIMESTAMP への自動キャストもサポートしています。したがって、myField 列でインデックスを使用できる最適化されたクエリは次のようになります。

SELECT * FROM myTable 
WHERE myField BETWEEN DATE'2012-10-01' AND DATE'2012-10-30' 
AND CAST(myField AS TIME) BETWEEN TIME'00:00:00' AND TIME'17:00:00'
于 2012-10-10T11:36:31.160 に答える