【发布时间】:2011-11-10 20:11:21
【问题描述】:
我正在尝试从单词的第一个字母在一个范围内的表中进行选择(例如 a-f)
我尝试使用这样的 where 子句:
WHERE lower(substring(title from 1 for 1)) IN ARRAY['a', 'k', 't']
希望我以后能找到一种方法来动态生成范围 ARRAY。
上述方法不起作用。知道我做错了什么吗?
【问题讨论】:
标签: postgresql
我正在尝试从单词的第一个字母在一个范围内的表中进行选择(例如 a-f)
我尝试使用这样的 where 子句:
WHERE lower(substring(title from 1 for 1)) IN ARRAY['a', 'k', 't']
希望我以后能找到一种方法来动态生成范围 ARRAY。
上述方法不起作用。知道我做错了什么吗?
【问题讨论】:
标签: postgresql
您可以使用SIMILAR TO 关键字。以下将匹配以“a”、“k”或“t”开头的所有标题。
... WHERE lower(title) SIMILAR TO '(a|k|t)%'
如果您想使用范围,可以使用[] 表示法:
... WHERE lower(title) SIMILAR TO '[a-f]%'
注意事项
% 字符匹配模式后面的任意数量的字符。例如,第二个模式示例将匹配:'abc'、'ab'、'a'、'far'、'fear' 等。
另外,需要注意的是,SIMILAR TO 关键字仅适用于 PostgreSQL,而不是 ANSI SQL。
最后,lower(title) 在使用字符类时不是必需的。你可以简单地搜索类似的东西
WHERE title SIMILAR TO '[a-fA-F]%'
【讨论】:
IN 看不懂右边的数组,你要= ANY:
WHERE lower(substring(title from 1 for 1)) = ANY (ARRAY['a', 'k', 't'])
或者您可以使用LIKE、SIMILAR TO 或~ (POSIX regex)。
额外参考:
【讨论】: