【问题标题】:How to check if all items in a group are contained in a string for many items? - RegEx如何检查组中的所有项目是否包含在许多项目的字符串中? - 正则表达式
【发布时间】:2021-09-23 12:28:07
【问题描述】:

我计划在我的 SQL 查询中嵌入 RegEx,因此不能真正为此使用循环。

基本上,我正在尝试检查一系列组,以查看我的列的名称是否包含任何这些单独组的所有属性(即,必须独立而不是完全检查组)。

例如,

group1 = l, w, q
group2 = o, l, d

如果列名包含group1 中的所有项目(例如low_quality)应返回true。同样,cold 也将返回 true,因为它匹配 group2 中的每个项目。

我将如何验证我的列名是否包含任何组中的每个项目? (项目可以是 >1 个字符,我有大约 40 个组要测试)。

可以修改以下几行吗?

SELECT column_name,
       (CASE WHEN REGEXP_LIKE(column_name, ((?=l)(?=w)(?=q))|((?=o)(?=l)(?=d))) THEN true ELSE NULL
        END) AS flag
FROM information_schema.columns;

我只是不确定如何独立检查多个组。

【问题讨论】:

  • 我觉得你可以试试REGEXP_LIKE(column_name, '^(?:(?=.*l)(?=.*w)(?=.*q)|(?=.*o)(?=.*l)(?=.*d))')
  • 是的,它奏效了。谢谢!

标签: sql regex list presto regexp-like


【解决方案1】:

你可以使用

REGEXP_LIKE(column_name, '^(?:(?=.*l)(?=.*w)(?=.*q)|(?=.*o)(?=.*l)(?=.*d))')

详情

  • ^ - 字符串开头
  • (?: - 匹配两种模式之一的非捕获组:
    • (?=.*l)(?=.*w)(?=.*q) - lwq 任意顺序
  • | - 或
    • (?=.*o)(?=.*l)(?=.*d) - old 任意顺序
  • ) - 小组结束。

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 2012-07-07
    • 1970-01-01
    • 2020-08-06
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 2013-11-19
    相关资源
    最近更新 更多