@> 运算符输出不是预期的结果?
@> operator output not expected result?
我目前正在尝试理解为什么 @>
在我评估此查询时给出 false
select tsrange('1990-01-01 01:00:00','infinity') @> tsrange('1990-01-01 00:00:00','2001-10-01 00:00:00')
https://dbfiddle.uk/?rdbms=postgres_12&fiddle=f2e5b7e2b24ea8c0bda74f7cdae1c3d4
据我了解 https://www.postgresql.org/docs/current/functions-range.html
中的运算符
它应该回答是否
Does the first range contain the second?
在那种情况下我会说是?
修改下限好像可以,但为什么要修改呢?
它应该仍然包含第二个?还是我遗漏了什么
结果正确,必须是 false
。范围右操作数从 1990-01-01 00:00:00
开始,但左操作数从 1990-01-01 01:00:00
开始,这是左操作数后一小时。这就是 returning false
的原因。 with @>
右操作数的运算符范围必须在左操作数的范围内。(包括两个边界)
如果你像下面这样比较它会 return true
select tsrange('1990-01-01 00:00:00','infinity') @> tsrange('1990-01-01 00:00:00','2001-10-01 00:00:00')
我目前正在尝试理解为什么 @>
在我评估此查询时给出 false
select tsrange('1990-01-01 01:00:00','infinity') @> tsrange('1990-01-01 00:00:00','2001-10-01 00:00:00')
https://dbfiddle.uk/?rdbms=postgres_12&fiddle=f2e5b7e2b24ea8c0bda74f7cdae1c3d4
据我了解 https://www.postgresql.org/docs/current/functions-range.html
中的运算符它应该回答是否
Does the first range contain the second?
在那种情况下我会说是?
修改下限好像可以,但为什么要修改呢? 它应该仍然包含第二个?还是我遗漏了什么
结果正确,必须是 false
。范围右操作数从 1990-01-01 00:00:00
开始,但左操作数从 1990-01-01 01:00:00
开始,这是左操作数后一小时。这就是 returning false
的原因。 with @>
右操作数的运算符范围必须在左操作数的范围内。(包括两个边界)
如果你像下面这样比较它会 return true
select tsrange('1990-01-01 00:00:00','infinity') @> tsrange('1990-01-01 00:00:00','2001-10-01 00:00:00')