Mysql 如何基于regex查询在flag列中插入yes或no值
我有一个简单的更新,非常适合分析美国的电话号码。它根据以下查询在phone_flag列中正确插入YMysql 如何基于regex查询在flag列中插入yes或no值,mysql,sql,regex,sql-update,where-clause,Mysql,Sql,Regex,Sql Update,Where Clause,我有一个简单的更新,非常适合分析美国的电话号码。它根据以下查询在phone_flag列中正确插入Y UPDATE database.table SET phone_flag = 'Y' WHERE id BETWEEN 1 and 100000 AND (phone REGEXP '[0-9] {10}'); 如果N值与表达式不匹配,我想插入N值,但我不知道如何插入。我使用的查询 UPDATE database.table SET phone_flag
UPDATE database.table SET phone_flag = 'Y'
WHERE id BETWEEN 1 and 100000
AND (phone REGEXP '[0-9] {10}');
如果N值与表达式不匹配,我想插入N值,但我不知道如何插入。我使用的查询
UPDATE database.table
SET phone_flag = CASE
WHEN phone = REGEXP [0-9]{10} then 'Y'
ELSE 'N' END
WHERE id = '7'
有人知道怎么修吗?谢谢。只要:
UPDATE database.table
SET phone_flag = CASE WHEN phone REGEXP '^[0-9]{10}$' then 'Y' ELSE 'N' END
WHERE id = 7
理由:REGEXP
是一个运算符,不要将其与=
一起使用
还要注意的是,我在开头用^
修改了regex,在结尾用$
修改了regex:这迫使电话
只包含10位数字(不超过10位,并且没有其他字符)。如果不是您想要的,您可以恢复该更改。只要:
UPDATE database.table
SET phone_flag = CASE WHEN phone REGEXP '^[0-9]{10}$' then 'Y' ELSE 'N' END
WHERE id = 7
理由:REGEXP
是一个运算符,不要将其与=
一起使用
还要注意的是,我在开头用
^
修改了regex,在结尾用$
修改了regex:这迫使电话
只包含10位数字(不超过10位,并且没有其他字符)。如果不是您想要的,您可以恢复该更改。只需在REGEXP
之前去掉=
,并将REGEXP加引号即可。您在第一个查询中的语法是正确的。请注意,REGEXP
匹配列中的任何位置。因此,这将匹配abc1234567890xyz。它还将匹配长度超过10个字符的数字。如果它应该正好是10个字符,则使用^
和$
锚定它。只需在REGEXP
之前去掉=
,并将REGEXP放在引号中。您在第一个查询中的语法是正确的。请注意,REGEXP
匹配列中的任何位置。因此,这将匹配abc1234567890xyz。它还将匹配长度超过10个字符的数字。如果它应该正好是10个字符,请使用^
和$
锚定它。