- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果有人想知道,我正在回收我自己回答的另一个问题,因为我意识到我的问题的根本原因与我想象的不同:
我的问题其实看起来很简单,但我找不到办法。
如果数组的任何元素在两个值之间,如何查询 postgres?
文档指出 a BETWEEN b and c
相当于a > b and a < c
但这不适用于数组,因为
ANY({1, 101}) BETWEEN 10 and 20
必须是false
同时
ANY({1,101}) > 10 AND ANY({1,101}) < 20
必须是 true。
{1,101} 表示包含 1 和 101 两个元素的数组。
如何在不求助于解决方法的情况下解决这个问题?
问候,
比尔门
编辑:为清楚起见:
我遇到的情况是,我正在通过 xpath() 查询一个 xml 文档,但是对于这个问题,包含一个类型为 int[] 的数组的列可以完成这项工作。
id::int | numbers::int[] | name::text
1 | {1,3,200} | Alice
2 | {21,100} | Bob
我想要所有名称,其中有一个 number
介于 20
之间和 30
- 所以我想要Bob
查询
SELECT name from table where ANY(numbers) > 20 AND ANY(numbers) < 30
将返回 Alice
和 Bob
, 显示 alice 的数字 > 20 以及其他数字 < 30。
在这种情况下不允许使用 BETWEEN 语法,但是 between 无论如何只能在内部映射到 > 20 AND < 30
引用有关 Between Operators 映射到 > 和 < documentation 的文档:
There is no difference between the two respective forms apart from the CPU cycles required to rewrite the first one into the second one internally.
附言:
只是为了避免为此添加一个新问题:我该如何解决
id::int | numbers::int[] | name::text
1 | {1,3,200} | Alice
2 | {21,100} | Alicia
SELECT id FROM table WHERE ANY(name) LIKE 'Alic%'
result: 1, 2
我只能找到将一个值匹配到多个正则表达式的示例,但不能找到将一个正则表达式与一组值匹配的示例:/。除了显示的语法无效外,ANY 必须是第二个操作数,但 LIKE 的第二个操作数必须是正则表达式。
最佳答案
exists (select * from (select unnest(array[1,101]) x ) q1 where x between 10 and 20 )
你可以根据这个查询创建一个函数
第二种方法:
select int4range(10,20,'[]') @> any(array[1, 101])
时间戳和日期类似:
select tsrange( '2015-01-01'::timestamp,'2015-05-01'::timestamp,'[]') @> any(array['2015-05-01', '2015-05-02']::timestamp[])
阅读更多信息:range operators
关于postgresql - 带有 BETWEEN 条件的 postgres ANY(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34328723/
我是一名优秀的程序员,十分优秀!