【问题标题】:MysQL Update if a count condition is met如果满足计数条件,MySQL 更新
【发布时间】:2023-03-14 21:59:01
【问题描述】:

我有一个包含 5000 行的表。如果只找到一对(),我需要可以通过删除“(...)”中的所有值来更新每一行的 SQL 命令。

基本上,如果我有一个连续的名字:
姓氏(额外信息)
我需要删除“(extra info)”,只留下姓名
但是如果没有额外的一对 ()

如果有一行 姓名 Surname(数据)(额外信息)

脚本不应修改此名称

简单来说,我需要更新一个只有一个(或)符号的名称

非常感谢

【问题讨论】:

  • WHERE name NOT LIKE '%(%)%(%)% 将跳过具有多个 (...) 的行

标签: mysql sql-update substring


【解决方案1】:

你能尝试找到第一个 '(' 和它的子字符串吗?

别忘了用 case for none ( in string

update userlogin
set fullname = case position('(' in FullName) 
when 0
then fullname
else substring(Fullname,1,position('(' in FullName) - 1) 
end

【讨论】:

    【解决方案2】:

    这是我的问题的实现。我使用 select 让我在将结果应用于更新请求之前检查结果。该脚本显示了一个表 3 列:Id、Name、UpdatedName,其中 Name 是我们拥有的,UpdateName 是我们将获得的

      SELECT `Id`,`Name`, 
        (case when ((LENGTH(`Name`)-LENGTH(REPLACE(`Name`, '(', ''))) = 1) 
         THEN
              SUBSTRING_INDEX(`Name`, '(', 1)
         ELSE
              '-'
         END)
         as updated_name,
        FROM table
        WHERE (LENGTH(`Name`)-LENGTH(REPLACE(`Name`, '(', ''))) = 1
        LIMIT 0,1500
    

    附:我使用 Id 来允许我修改值

    【讨论】:

      【解决方案3】:
      SELECT CASE
          WHEN fname = 'correct' THEN 'your condition'
          WHEN sname = 'correct' THEN 'your second condition'
          ELSE 'baz'
      END AS fullname
      FROM `databasetable`
      

      或者你也可以这样做

      CASE
          WHEN action = 'update' THEN
              UPDATE sometable SET column = value WHERE condition;
          WHEN action = 'create' THEN
              INSERT INTO sometable (column) VALUES (value);
      END CASE
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-02-24
        • 2017-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-31
        • 1970-01-01
        相关资源
        最近更新 更多