ฉันกำลังพยายามสร้างแบบสอบถามสำหรับช่วงเวลาโดยใช้ QueryDSL (รวมเริ่มต้น วันที่สิ้นสุดพิเศษ)
ใน เอกสารประกอบของ QueryDSL ฉันพบว่า public BooleanExpression between(Expression<T> from, Expression<T> to);
เป็นเอกสิทธิ์เฉพาะทั้งสองด้าน
รับนิพจน์แรก ‹ นี้ ‹ ที่สอง
อย่างไรก็ตาม มันแปลเป็น Oracle SQL BETWEEN
ซึ่งรวมทั้งสองด้าน
(เทียบเท่ากับ first <= this <= second
)
QueryDSL เช่นนี้:
[...]
person.name.like(n)
.and(person.birthdate.between(from, to))
[...]
แปลเป็น Oracle SQL ดังนี้:
SELECT *
FROM PERSON
WHERE NAME LIKE n
AND BIRTHDATE BETWEEN from AND to;
ไม่มีใครรู้เหตุผล/ตรรกะเบื้องหลังเรื่องนี้หรือไม่
มันเป็นเพียงเอกสารที่ 'เน่าเสีย' หรือไม่
เห็นได้ชัดว่าระหว่างนี้ใช้ไม่ได้ผลสำหรับฉัน
ฉันควรจะใช้สิ่งที่เป็นก้อนมากขึ้น
person.name.like(n)
.and(person.birthdate.goe(from)
.and(person.birthdate.lt(to))
หรือมีวิธีแก้ไขปัญหาที่สะอาดซึ่งทำสิ่งที่ฉันต้องการ?
between "from" and "to" - 1
? (สมมติว่าto_
เป็นค่าDATE
- person a_horse_with_no_name   schedule 03.08.2015between "from" and "to" - interval '1' second
- person Ben   schedule 03.08.2015