如何根据正则表达式查询将是或否值插入标志列

Posted

技术标签:

【中文标题】如何根据正则表达式查询将是或否值插入标志列【英文标题】:How to insert yes or no value into flag column based on regex query 【发布时间】:2020-10-23 22:24:56 【问题描述】:

我有一个简单的更新,可以很好地分析美国的电话号码。它根据以下查询在 phone_flag 列中正确插入 Y。

UPDATE database.table SET phone_flag = 'Y'
    WHERE id BETWEEN    1 and 100000
      AND (phone REGEXP '[0-9] 10');

如果 N 值与表达式不匹配,我想插入它,但我不知道该怎么做。我使用的查询。

UPDATE database.table
       SET phone_flag = CASE
             WHEN phone = REGEXP [0-9]10 then 'Y'
             ELSE 'N' END
       WHERE id = '7'

有人知道怎么解决吗?谢谢。

【问题讨论】:

REGEXP 之前去掉= 并将正则表达式放在引号中。您在第一个查询中使用了正确的语法。 请注意,REGEXP 匹配列中的任何位置。所以这将匹配abc1234567890xyz。它还将匹配超过 10 个字符的数字。如果应该正好是 10 个字符,请使用 ^$ 锚定它。 【参考方案1】:

只是:

UPDATE database.table 
SET phone_flag = CASE WHEN phone REGEXP '^[0-9]10$' then 'Y' ELSE 'N' END
WHERE id = 7

理由:REGEXP 是一个运算符,不要将= 与它一起使用。

还请注意,我修改了正则表达式,开头为 ^,结尾为 $:这会强制 phone 包含 恰好 10 位数字(不多,也没有其他字符)。如果这不是您想要的,您可以恢复该更改。

【讨论】:

以上是关于如何根据正则表达式查询将是或否值插入标志列的主要内容,如果未能解决你的问题,请参考以下文章

关于grep后跟多个正则查询条件的问题

如何避免使用 Python re 库删除文本文件中正则表达式标志之间的文本块?

正则表达式修饰符 - 可选标志

clickhouse中插入查询中的正则表达式

如何在 SQLite 查询中使用正则表达式?

日期 ETL 的大查询正则表达式