【问题标题】:What did I do wrong? UPDATE with condition and LIKE postgres我做错什么了? UPDATE 条件和 LIKE postgres
【发布时间】:2023-01-08 20:30:10
【问题描述】:

有一个表,我需要根据条件更新第 3 列中的数据。如果有括号,那么您需要从那里获取信息,如果没有,则第一列中的内容。把它放在第 3 列没有信息的地方。在大多数情况下,有必要将 where status down 或 error

https://dbfiddle.uk/GgFft6cY

这是我的要求:


    UPDATE table_1
    SET name_3 = 
        CASE
            WHEN name_3 != '' THEN name_3
            WHEN name_1 LIKE '%(%' THEN SUBSTRING(name_1 FROM '%(%' FOR ')')
            ELSE name_1
        END
    WHERE status IN ('down', 'error');

错误:无效的正则表达式:括号 () 不平衡

怎么了?或者可以做不同的事情吗?

【问题讨论】:

  • 你能解释一下WHEN name_1 LIKE '%(%' THEN SUBSTRING(name_1 FROM '%(%' FOR ')') 应该做什么吗?
  • 检查 () 中的值是否存在,然后将其写入第 3 列,如果不存在 (),则写入所有 @Jens
  • not equals在sql中是<>不是!=
  • from 和 for 之后必须是数字,不能是字符串
  • @Jens:你是对的,但是 != 也被 Postgres 接受了

标签: postgresql


【解决方案1】:

FROMFOR 之后,您需要一个起始索引和长度,这是一个数字。

 UPDATE table_1
    SET name_3 = 
        CASE
            WHEN name_3 <> '' THEN name_3
            WHEN name_1 LIKE '%(%' THEN SUBSTRING(name_1 FROM POSITION ('(' in name_1)+1 FOR POSITION (')' in name_1) -POSITION ('(' in name_1)-1)
            ELSE name_1
        END
    WHERE status IN ('down', 'error');

Demo

【讨论】:

  • 只有他和 () 在一起,我想要没有他们
  • @user20881617 改变了我的答案
猜你喜欢
  • 1970-01-01
  • 2011-04-16
  • 2011-06-01
  • 1970-01-01
  • 2012-02-17
  • 2011-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多