CONCAT,但如果已经完成,请忽略

时间:2019-03-29 16:11:59

标签: mysql sql mysqli pdo

如果有关个人资料的信息已过时,我想在一个人的名字后面添加一个星号(*)。

唐纳德

$stmt = $conn->prepare("UPDATE contacts SET name = concat(name, '*') WHERE phone = ?");
$stmt->bind_param("s",$phone);
$stmt->execute();

唐纳德*

第一次可以正常运行,但是如果没有任何更改,并且我更新了配置文件,它会添加另一个星号,因此名称为 唐纳德**。下次是唐纳德***等。

如何检查名称是否已经带有星号,如果没有,什么都不做?

2 个答案:

答案 0 :(得分:2)

您可以使用right()来检查最后一个字符是否为*,并且仅在不是这种情况时才更新行。

UPDATE contacts
       SET name = concat(name, '*')
       WHERE phone = ?
             AND right(name, 1) <> '*';

答案 1 :(得分:0)

一种方法是在导出新值的表达式中使用条件测试。例如

UPDATE contacts
   SET name = CONCAT(name, CASE 
                             WHEN name LIKE '%*' THEN ''
                             ELSE '*'
                           END
              )     
 WHERE phone = ?