【问题标题】:Select where first letter in a range ( PostgreSQL )选择范围内的第一个字母(PostgreSQL)
【发布时间】:2011-11-10 20:11:21
【问题描述】:

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

我尝试使用这样的 where 子句:

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

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

上述方法不起作用。知道我做错了什么吗?

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    您可以使用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]%'

    【讨论】:

      【解决方案2】:

      IN 看不懂右边的数组,你要= ANY

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

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

      额外参考:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多