sql >> Databasteknik >  >> RDS >> Mysql

HQL / JPA hittar tillgängliga artiklar mellan datumintervall

Jag ser att din fråga är korrekt.

Men om du vill välja baserat på bil-ID bör du lägga till bil-ID som ett villkor också i din fråga

Till exempel

SELECT b.id, b.startDate, b.endDate, b.car.id
FROM BorrowedDate b
WHERE :userDateStart NOT BETWEEN b.startDate AND b.endDate
AND :userDateEnd NOT BETWEEN b.startDate AND b.endDate
AND b.car.id = :carId

ELLER så kan du göra det också

SELECT b.id, b.startDate, b.endDate, c.id
FROM BorrowedDate b INNER JOIN b.car c
WHERE :userDateStart NOT BETWEEN b.startDate AND b.endDate
AND :userDateEnd NOT BETWEEN b.startDate AND b.endDate
AND c.id = :carId

då måste du klara :cardId värde är lika med 2

UPPDATERA

du kan prova den här SQL-frågan om du behöver få resultatdynamik, jag kommer snart att uppdatera den med JPQL

SELECT b.id, b.startDate, b.endDate, b.car.id
FROM BorrowedDate b
WHERE '2017-04-02 00:00:00' NOT BETWEEN b.startDate AND b.endDate
AND '2017-04-10 00:00:00' NOT BETWEEN b.startDate AND b.endDate
AND b.car.id NOT IN (SELECT DISTINCT bd.car.id FROM BorrowedDate bd WHERE '2017-04-02 00:00:00' BETWEEN bd.startDate AND bd.endDate OR '2017-04-10 00:00:00' BETWEEN bd.startDate AND bd.endDate) 

HÄR är JPQL också

SELECT model.id, model.startDate, model.endDate, model.car.id
FROM BorrowedDate model
WHERE :userDateStart NOT BETWEEN model.startDate AND model.endDate
AND :userDateEnd NOT BETWEEN model.startDate AND model.endDate
AND model.car.id NOT IN (SELECT DISTINCT b.car.id FROM BorrowedDate b WHERE :userDateStart BETWEEN b.startDate AND b.endDate OR :userDateEnd BETWEEN b.startDate AND b.endDate)


  1. Skapa tabell från vy - Oracle SQL SQL-fel:ORA-01723:noll-längdskolumner är inte tillåtna

  2. skapa ett slumptal med MYSQL

  3. trasigt rör undantag med MySql i Grails-appen

  4. Architecting for Security:En guide för MySQL