TIMESTAMP
とDATETIME
フィールドは、日付の両方を表す(2016年8月18日など)時間(07:43:20のような)。つまり、myTimestamp = '2016-08-18'
は出てこない可能性は非常に低いです。true
myTimestamp
の正確な値が2016-08-18 00:00:00
の場合にのみ真となります。あなたがテキストとして日付/時刻の値を表す場合
、あなたはこのようになりますISO形式を使用する必要があります。
2016-08-18 07:43:20
あなたは異なるフォーマットのテキストを使用したい場合は、することができますただし、変換する必要がありますusing STR_TO_DATE()
in MySQL。これらの変換機能は、RDBMSサーバーの異なるメーカーとモデル間では一般的に標準化されていません。
- 1日にすべてのタイムスタンプ値を取得するには、範囲を検索する必要があります。これはそれを行うための最善の方法である:
WHERE myTimestamp >= DATE('2016-08-18') AND myTimestamp < DATE('2016-08-18') + INTERVAL 1 DAY
検索するこの方法、他のものよりも少し冗長ながら、MySQLはmyTimestampにインデックスを使用することができます。テーブルに行が多数ある場合、これは驚くほどの時間を節約できます。
データベースサーバーの製造元とモデルの間で日時処理がほとんど標準化されていません。
ここのコメントのクエリが不正です。それは言う:あなたはWHERE
句でp.bookEntity.bookId
を使用している
SELECT b.name, b.publisher, sum(p.copies)
FROM PurchaseEntity p, BookEntity b /* old-timey comma join! */
WHERE p.bookEntity.bookId = b.bookId /* wrong! */
AND date(p.purchaseTime)= '2016-08-18'
group by b.bookId /* nonstandard! */
。それは正しくありません。
あなたはMySQLのnonstandard extension to GROUP BY
も使用しています。
あなたのクエリはおそらくこれを言うはずです。これをJavaプログラムに組み込む前に、SQLクライアント・プログラムでこの照会をテストする必要があります。このmyTimestampような、それが動作する時間を持つ
SELECT b.name, b.publisher, sum(p.copies)
FROM PurchaseEntity p,
JOIN BookEntity b ON p.bookId = b.bookId
AND date(p.purchaseTime)= '2016-08-18'
group by b.name, b.publisher
チェック、=「2016年8月18日15時53分57秒」 –