sql - 在 Snowflake 中使用正则表达式过滤与句子/单词的完全匹配

标签 sql regex snowflake-cloud-data-platform

我想过滤与特定单词或句子匹配的列。例如,如果我选择单词 anti 进行过滤,则在以下行中:

this is anti-pattern
antimosquitos products
the word anti is cool

我只想保留最后一个,因为它是唯一一个匹配整个匹配模式的整体,而不是在另一个词中。

我已经尝试使用 RLIKE,但我总是得到一个 FALSE 值,但我不明白为什么。我希望至少在这些 SQL 语句之一中有一个 TRUE 值:

SELECT RLIKE ('Spray antimosquitos', '\bantimosquitos\b', 'i') as p1;
SELECT RLIKE ('Spray antimosquitos', '\santimosquitos\s', 'i') as p1;
SELECT RLIKE ('Spray antimosquitos', '\santimosquitos', 'i') as p1;
SELECT RLIKE ('Spray antimosquitos', '\santimosquitos', 'i') as p1;

然而,事实并非如此。我尝试过其他形式,例如:

SELECT RLIKE ('Spray antimosquitos', '\b antimosquitos \b', 'i') as p1
SELECT RLIKE ('Spray antimosquitos', '*antimosquitos*', 'i') as p1
SELECT RLIKE ('Spray antimosquitos', ' antimosquitos ', 'i') as p1

而且我无法获得返回值 TRUE。

我的 RLIKE 怎么了?

最佳答案

你需要

  • 确保反斜杠加倍,因为反斜杠在字符串文字中用于创建字符串转义序列(例如 \t 用于制表符,\n 用于换行等。 )
  • 确保模式匹配整个字符串,RLIKE 就是这样工作的。它通常通过在模式的两端添加 .* 来启用。

所以,在你的情况下,你可以使用

'.*\\bantimosquitos\\b.*'

关于sql - 在 Snowflake 中使用正则表达式过滤与句子/单词的完全匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70336202/

相关文章:

c# - SQL Server返回给C#的是什么

sql - 如果前面没有相同字符,则替换字符

Python 正则表达式 : How to repeat a repeat of a pattern?

javascript - JavaScript 中的 (/^\s+|\s+$/gm) 是什么意思?

snowflake-cloud-data-platform - 是否可以在没有用户帐户或默认角色的情况下使用 SSO 登录 Snowflake?

snowflake-cloud-data-platform - Snowflake ACCOUNT_USAGE View - 表(ROW_COUNT、BYTES)在延迟期内未更新

mysql - 根据命令显示特定输出 MYSQL

mysql - 我们如何在 MySql 查询中的两个单独字段中分配 ORDER BY?

regex - guid 的 vim 模式是什么

snowflake-cloud-data-platform - 我可以将 "."作为雪花中列名称的一部分吗?