可用版本:Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

OVERLAPS谓词

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

在比较日期时,SQL 标准允许使用特殊的 OVERLAPS 谓词,该谓词检查两个日期范围是否相互重叠。可以这样说

-- This yields true
(DATE '2010-01-01', DATE '2010-01-03') OVERLAPS (DATE '2010-01-02' DATE '2010-01-04')

-- INTERVAL data types are also supported. This is equivalent to the above
(DATE '2010-01-01', CAST('+2 00:00:00' AS INTERVAL DAY TO SECOND)) OVERLAPS
(DATE '2010-01-02', CAST('+2 00:00:00' AS INTERVAL DAY TO SECOND))

jOOQ 中的 OVERLAPS 谓词

jOOQ 支持 degree 为 2 的行值表达式上的 OVERLAPS 谓词。以下方法包含在 org.jooq.Row2

Condition overlaps(T1 t1, T2 t2);
Condition overlaps(Field<T1> t1, Field<T2> t2);
Condition overlaps(Row2<T1, T2> row);

这允许将上述谓词表示为如下形式

// The date range tuples version
row(Date.valueOf('2010-01-01'), Date.valueOf('2010-01-03')).overlaps(Date.valueOf('2010-01-02'), Date.valueOf('2010-01-04'))

// The INTERVAL tuples version
row(Date.valueOf('2010-01-01'), new DayToSecond(2)).overlaps(Date.valueOf('2010-01-02'), new DayToSecond(2))

jOOQ 对标准的扩展

与标准(或任何实现标准的数据库)不同,jOOQ 还支持 OVERLAPS 谓词来比较任意 degree 为 2 的行值表达式。例如,(1, 3) OVERLAPS (2, 4) 在 jOOQ 中将产生 true。 它的模拟如下

-- This predicate
(A, B) OVERLAPS (C, D)

-- can be emulated as such
(C <= B) AND (A <= D)

方言支持

此示例使用 jOOQ

row(1, 3).overlaps(row(2, 4))

翻译成以下特定方言的表达式

所有方言

(
  2 <= 3
  AND 1 <= 4
)
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL

反馈

您对此页面有任何反馈吗? 我们很乐意听取您的意见!

The jOOQ Logo