2016-08-23 18 views
0

MySQLデータベースにタイムスタンプタイプのフィールドがあります。特定の日付のすべてのレコードをリストしたいと思います.20/18/1816としましょう。 このためにJPQLクエリを書きたいと思います。タイムスタンプフィールドから特定の日付のレコードを取得する

TRUNC()to_DATE()UNIX_TIMESTAMP()myTimestamp = '2016-08-18'というようないくつかの方法を試しましたが、どれも動作していないようです。

この方法をお勧めします。

+0

チェック、=「2016年8月18日15時53分57秒」 –

答えて

0

タイムスタンプや日時フィールドの日付部分を取得するには、日付()MySQLの機能を使用します。

select * from yourtable where date(timestamp_field)= '2016-08-18' 
+0

私は任意の関数を使用していますたびに、現れるエラー「(」、明記がありますその、AND、GROUP、HAVING、ISが必要です、 '('があります。 – Random

+0

MySQLでは、関数名とそれに続くカッコの間にはスペースがないことがあります。 MAX(col)が有効です。 'MAX(col)'はそうではありません。それはちょっとしたものです。 –

+0

空白の有無にかかわらず同じエラーが返されます – Random

1
  1. TIMESTAMPDATETIMEフィールドは、日付の両方を表す(2016年8月18日など)時間(07:43:20のような)。つまり、myTimestamp = '2016-08-18'は出てこない可能性は非常に低いです。truemyTimestampの正確な値が2016-08-18 00:00:00の場合にのみ真となります。あなたがテキストとして日付/時刻の値を表す場合

  2. 、あなたはこのようになりますISO形式を使用する必要があります。

    2016-08-18 07:43:20

あなたは異なるフォーマットのテキストを使用したい場合は、することができますただし、変換する必要がありますusing STR_TO_DATE() in MySQL。これらの変換機能は、RDBMSサーバーの異なるメーカーとモデル間では一般的に標準化されていません。

  1. 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 
+0

DATE関数を使用すると、{、AND、GROUP、HAVING、ISが期待されていますが、 '' 'エラーが発生しています括弧の前に空白を削除しています – Random

+0

別のあなたが言っているメッセージは、MySQLの構文エラーメッセージのようには見えません。他のデータベースサーバではなくMySQLを使用していますか? –

+0

データベースはMySQLですが、私はHibernateを使用しています。 JPA。基本的に私はハイバネートクエリを書いています。 String bookQuery = "SELECT b.name、b.publisher、sum(p.copies)FROM PurchaseEntity p、BookEntity b" + "WHERE p.bookEntity.bookId = b .bookId "+ " AND日付(p.purchaseTime)= '2016-08-18' "+ "group by b.bookId"; Query BookQuery = entityManager.createQuery(bookQuery); リスト< Object[] > resultListByUser = UserQuery.getResultList(); – Random

関連する問題