【问题标题】:SELECT where value in collection of ranges选择范围集合中的值
【发布时间】:2016-04-29 01:35:44
【问题描述】:

我正在尝试选择值存在于任何范围集合中的行。到目前为止,我只能完成以下工作:

SELECT * FROM table
WHERE num <@ numrange(1,4) OR num <@ numrange(7,11)

我希望我能得到类似的东西

SELECT * FROM table
WHERE num <@ ANY(numrange(1,4), numrange(7,11))

工作,但我没有任何运气。

有比将 OR 链接在一起更好的解决方案的想法吗?

【问题讨论】:

    标签: postgresql select range contains any


    【解决方案1】:

    你很接近...ANY(...) 表达式中的值需要是一个数组:

    SELECT * FROM table
    WHERE num <@ ANY(ARRAY[numrange(1,4), numrange(7,11)])
    

    【讨论】:

    • 您对 num 列的索引是否也有任何提示?
    • &lt;@ 运算符将使这变得困难。在这种情况下,我可能只是将查询写为num BETWEEN 1 AND 3 OR ...,这样使用索引应该没有问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 2019-09-30
    • 1970-01-01
    • 2013-11-06
    相关资源
    最近更新 更多