gpt4 book ai didi

sql - 在 Postgres 的数组列中使用 UPCASE 或 Regexp

转载 作者:行者123 更新时间:2023-11-29 13:59:47 24 4
gpt4 key购买 nike

我正在尝试查询 Postgres 数组列而不考虑大小写,甚至可能也忽略空格。

SELECT "cats".* FROM "cats" WHERE ('CATS - PERSA' = ANY(UPCASE(cat_types))) ORDER BY "cats"."id" ASC LIMIT 1;

但是我得到这个错误:

You might need to add explicit type casts.

作为奖励,我还希望能够执行正则表达式,其中搜索忽略 cat_types 列值中的空格。

我正在使用 Ruby on Rails 来执行此操作。

cat_type.upcase.delete(' ')
Cats.where("'#{cat_type}' = ANY(cat_types)").first

查询仅使用 ANY 即可,但我希望能够忽略空格并将 cat_types 中的值大写,以便它有更多匹配机会。 Ilike 也有可能。

谢谢。

最佳答案

SELECT DISTINCT c.*
FROM cats c, unnest(c.cat_types) AS cat_type
WHERE upper(translate(cat_type, ' ', '')) = 'CATS-PERSA'
ORDER BY id
LIMIT 1;
  • Postgres 函数是 upper() ,而不是 upcase()

  • cat_types 似乎是一个数组,假定类型为 text[](缺少信息)。我 unnest()单独处理数组元素。这不能用 ANY 来完成,它只适用于简单的比较。

  • 我使用隐式 LATERAL JOIN在这里,需要 Postgres 9.3+(信息缺失)。

  • 如果多个数组元素匹配,您会在此处多次获取该行。因此 DISTINCT

更多关于 Postgres 中的模式匹配:
Pattern matching with LIKE, SIMILAR TO or regular expressions in PostgreSQL

关于sql - 在 Postgres 的数组列中使用 UPCASE 或 Regexp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22972712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com