2016-08-23 4 views
0

Ich habe ein Feld vom Typ Timestamp in meiner MySQL-Datenbank. Ich möchte alle Datensätze für ein bestimmtes Datum auflisten, sagen wir, 18/08/2016. Ich möchte eine JPQL-Abfrage dafür schreiben.Fetch Records für ein bestimmtes Datum aus Timestamp Feld

Ich versuchte zu verwenden TRUNC(), to_DATE(), UNIX_TIMESTAMP(), myTimestamp = '2016-08-18' ein paar andere Methoden, aber keine von ihnen scheint zu arbeiten.

Bitte schlagen Sie eine Methode dafür vor.

+0

überprüfen mit einer Zeit dann funktioniert es, wie diese myTimestamp = ‚2016.08.18 15.53.57‘ –

Antwort

0

das Datum() MySQL-Funktion das Datum Teil des Zeitstempels oder ein Datetime-Feld zu erhalten:

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

Jedes Mal, wenn ich eine Funktion verwende, gibt es einen Fehler in der ‚(‘ erscheint, die besagt, dass , , UND, GROUP, HAVING, erwartet wird, bekam '('. – Random

+0

In MySQL dürfen zwischen den Funktionsnamen und den ihnen folgenden Klammern keine Leerzeichen stehen. 'MAX (col)' ist gültig. 'MAX (col)' ist nicht. Es ist nur eine dieser kleinen Eigenheiten. –

+0

Es gibt den gleichen Fehler mit oder ohne Leerzeichen – Random

1
  1. TIMESTAMP und DATETIME Felder repräsentieren sowohl ein Datum (wie 2016.08.18) und eine Zeit (wie 07:43:20). Dies bedeutet, dass myTimestamp = '2016-08-18' sehr unwahrscheinlich ist true herauskommen. Es erscheint nur dann richtig, wenn myTimestamp den genauen Wert 2016-08-18 00:00:00 hat.

  2. Wenn Sie Datum/Zeit-Werte als Text darzustellen, müssen Sie das ISO-Format verwenden, die wie folgt aussieht:

    2016-08-18 07:43:20

Wenn Sie unterschiedlich formatierten Text verwenden möchten, können Sie , aber Sie müssen es konvertieren using STR_TO_DATE() in MySQL. Diese Konvertierungsfunktionen sind im Allgemeinen nicht zwischen verschiedenen Marken und Modellen von RDBMS-Servern standardisiert.

  1. Um alle Zeitstempelwerte eines Tages zu erhalten, müssen Sie einen Bereich suchen. Dies ist der beste Weg, das zu tun:

WHERE myTimestamp >= DATE('2016-08-18') AND myTimestamp < DATE('2016-08-18') + INTERVAL 1 DAY

Diese Methode des Suchens, während ein wenig ausführlicher als andere, kann MySQL einen Index für myTimestamp verwenden. Wenn Ihr Tisch viele Reihen hat, kann dies erstaunlich viel Zeit sparen.

Die Verarbeitung von Datum und Uhrzeit ist meist nicht zwischen Herstellern und Modellen von Datenbankservern standardisiert.

Bearbeiten Die Abfrage im Kommentar ist fehlerhaft. Dort heißt es:

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! */ 

Du p.bookEntity.bookId in einer WHERE-Klausel. Das ist nicht richtig.

Sie verwenden auch die nonstandard extension to GROUP BY von MySQL.

Ihre Abfrage sollte das wahrscheinlich sagen. Sie sollten diese Abfrage mit einem SQL-Client-Programm testen, bevor Sie versuchen, es in Ihrem Java-Programm zu erstellen.

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

Es gibt die {, , UND, GROUP, HAVING, erwartet wird, bekam '('} Fehler, wenn ich die Funktion DATE verwenden. Entfernen Sie das Leerzeichen, bevor die Klammer funktioniert nicht. – Random

+0

Sie möchten vielleicht eine andere fragen Die Nachricht, die Sie erwähnen, sieht nicht wie eine MySQL-Syntaxfehlermeldung aus. Sind Sie sicher, dass Sie MySQL und keinen anderen Datenbankserver verwenden? –

+0

Die Datenbank ist MySQL, aber ich verwende Hibernate JPA: Grundsätzlich schreibe ich eine Hibernate Query. String bookQuery = "SELECT b.name, b.Publisher, Summe (p.copies) FROM PurchaseEntity p, BookEntity b" + "WHERE p.bookEntity.bookId = b .bookId "+ " UND Datum (p.purchaseTime) = '2016-08-18' "+ "group by b.bookId"; Abfrage BookQuery = entityManager.createQuery (bookQuery); Liste < Object[] > resultListByUser = UserQuery.getResultList(); – Random

Verwandte Themen