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
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!