【问题标题】:SQL: Select with "Like" 2 elementsSQL:选择“喜欢”2个元素
【发布时间】:2022-01-03 04:57:22
【问题描述】:

如何在 PostgreSQL 数据库中选择名称中包含两个字母“a”的任何人? 我尝试select client from xclient where client like '%a%' 但这会返回所有名称中包含“a”的人。我必须使用“喜欢”。

结果是否应包括姓名中带有两个“a”的人 示例:“玛塔”。 例如,不能包含“Alaia”。

【问题讨论】:

  • 结果是否应该包括名字中带有三个“a”的人?
  • 在丹麦语中,连续的“aa”被认为是一个字符,“å”(即不是两个“a”。)
  • @HappyMoose 结果是否应该包括姓名中带有两个“a”的人示例:“Marta”。例如,不能包含“Alaia”。
  • 这里的部分问题是您非常不精确。您正在尝试实施的完整而准确的业务规则是什么?
  • 这很简单,名称中的“A”限制必须是两个,最小必须是两个。正确的例子“玛塔”。错误示例:“Angalaia”或“Aana”

标签: sql postgresql select sql-like


【解决方案1】:

试试这个:

select client from xclient where client like '%a%a%' 

【讨论】:

  • 这是所有连续两个“a”的人的回报。示例:“Aana”
  • @VictorHugo - LIKE '%a%a%' AND NOT LIKE '%a%a%a%' 将获取名称中包含两个 a 的所有人,但排除名称中包含 3 个或更多 a 的所有人。这将排除Aana,但你想用Baat做什么?
  • @MatBailie 这包括例如“Aangala”。限制是两个“A”,最小是两个“A”
  • 它绝对不包括Aangala NOT LIKE 明确排除它。
【解决方案2】:

你的问题和cmets很模糊。

我的解释是……

您认为Aa 是同一个字符

  • 所以,你应该使用ILIKE 而不是LIKE

您希望名称有两个 Aa,但不能超过两个,而且它们是否相邻也没关系。

WITH
  xclient AS
(
            SELECT 'Baat'   AS client
  UNION ALL SELECT 'Marta'
  UNION ALL SELECT 'Alaia'
  UNION ALL SELECT 'Angalaia'
  UNION ALL SELECT 'Aana'
  UNION ALL SELECT 'Arcanjamana'
)
SELECT
  *
FROM
  xclient
WHERE
      client     ILIKE '%a%a%'
  AND client NOT ILIKE '%a%a%a%'

演示:https://dbfiddle.uk/?rdbms=postgres_14&fiddle=a0894fdd211087db552537e40d28d9bf

【讨论】:

    【解决方案3】:

    我几乎可以肯定这段代码在你所说的例子中有效:

    select client from xclient where client like '%a%a%' and client not like '%a%a%a%' and client not like '%a%aa%' and client not like '%aa%a%' and client not like '%aa%aa%'
    

    毫无疑问,您可以使用the substring keyword 优化此代码,但无论如何,这应该如您所愿。

    【讨论】:

    • 这包括例如“Aangala”。限制是两个“A”,最小是两个“A”
    • 试试新代码(我编辑了我的答案)。
    • 是的,这是正确的,但如果名称是“Arcanjamana”?你明白我需要一个限制器吗?
    • 每次有人输入不同的名称时,我都无法编辑我的代码。
    • 好的,现在我明白你的意思了。在您的问题中,即使您指定了两个您不想出现的示例,MartaAlaia,您只声明您不想要两个 a b>,这就是我们都感到困惑的原因。现在,了解这个问题,我建议你检查REGEXP 来解决这个问题。你有一个例子here。我还鼓励您使用this website 进行测试。希望对您有所帮助!
    猜你喜欢
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 2016-09-13
    • 2021-09-03
    相关资源
    最近更新 更多