选择范围中第一个字母的位置(PostgreSQL)

时间:2011-11-10 20:11:22

标签: postgresql

我试图从一个表中选择单词的第一个字母在一个范围内(例如a-f)

我尝试了这样的where子句:

  

WHERE lower(substring(title from 1 for 1))IN ARRAY ['a','k','t']

希望我能找到一种方法稍后动态生成范围ARRAY。

以上不起作用。知道我做错了吗?

2 个答案:

答案 0 :(得分:8)

您可以使用SIMILAR TO关键字。以下内容将匹配以“a”,“k”或“t”开头的所有标题。

... WHERE lower(title) SIMILAR TO '(a|k|t)%'

如果您想使用范围,可以使用[]表示法:

... WHERE lower(title) SIMILAR TO '[a-f]%'

注意

  1. %字符匹配模式后面的任意数量的字符。例如,第二个模式示例匹配:'abc','ab','a','far','fear'等。

  2. 此外,请务必注意SIMILAR TO关键字仅适用于PostgreSQL,而且不是ANSI SQL。

  3. 最后,使用字符类时不需要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'])

或者您可以使用LIKESIMILAR TO~ (POSIX regex)

额外参考: