2016-08-23 3 views
0

내 MySQL 데이터베이스에 타임 스탬프 유형의 필드가 있습니다. 특정 날짜에 대한 모든 레코드를 나열하려고합니다. 예를 들어, 18/08/2016 이에 대한 JPQL 쿼리를 작성하고 싶습니다.타임 스탬프 필드에서 특정 날짜에 대한 레코드 가져 오기

TRUNC(), to_DATE(), UNIX_TIMESTAMP(), myTimestamp = '2016-08-18' 다른 몇 가지 방법을 사용해 보았지만 그 중 아무 것도 작동하지 않는 것 같습니다.

이 방법을 제안하십시오.

+0

점검 한 후이 myTimestamp = 같은 작품 '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'은 매우 희박합니다 (true). myTimestamp의 정확한 값이 2016-08-18 00:00:00 인 경우에만 true가됩니다. 당신이 텍스트로 날짜/시간 값을 나타낼 때

  2. ,이처럼 보이는 ISO 형식을 사용해야합니다

    2016-08-18 07:43:20

다르게 형식의 텍스트를 사용하려는 경우, 당신이 할 수있는 , 당신은 그것을 using STR_TO_DATE() in MySQL로 변환해야합니다. 이러한 변환 기능은 일반적으로 RDBMS 서 v의 다른 제조업체와 모델간에 표준화되지 않습니다.

  1. 하루에 모든 타임 스탬프 값을 가져 오려면 범위를 검색해야합니다. , MySQL은 myTimestamp에 인덱스를 사용할 수 있도록 다른 사람보다 좀 더 자세한하면서, 검색의

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

이 방법이 그렇게 할 수있는 가장 좋은 방법입니다. 테이블에 행 수가 많으면 시간이 많이 절약됩니다.

날짜 및 시간 처리는 데이터베이스 서버의 제조업체와 모델간에 대부분 표준화되지 않았습니다.

편집 여기에있는 설명의 쿼리 형식이 잘못되었습니다. 그것은 말한다 : 당신은 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도 사용하고 있습니다.

귀하의 검색어는 아마도 이것을 말합니다. SQL 클라이언트 프로그램을 Java 프로그램에 빌드하기 전에이 조회를 테스트해야합니다. 한 번에

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이지만 최대 절전 모드를 사용하고 있습니다. JPA. 기본적으로 최대 절전 모드 쿼리를 작성 중입니다. String bookQuery = "Select b.name, b.publisher, sum (p.copies) FROM PurchaseEntity p, BookEntity b"+ "어디에서 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

관련 문제