我试图从一个表中选择单词的第一个字母在一个范围内(例如a-f)
我尝试了这样的where子句:
WHERE lower(substring(title from 1 for 1))IN ARRAY ['a','k','t']
希望我能找到一种方法稍后动态生成范围ARRAY。
以上不起作用。知道我做错了吗?
答案 0 :(得分:8)
您可以使用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]%'
答案 1 :(得分:5)
IN
无法理解右侧的数组,您需要= ANY
:
WHERE lower(substring(title from 1 for 1)) = ANY (ARRAY['a', 'k', 't'])
或者您可以使用LIKE
,SIMILAR TO
或~
(POSIX regex)。
额外参考: