Mysql 如何基于regex查询在flag列中插入yes或no值

Mysql 如何基于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

我有一个简单的更新,非常适合分析美国的电话号码。它根据以下查询在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 = 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个字符,请使用
^
$
锚定它。