如何在oracle数据库列中添加特定值?

时间:2019-11-18 09:09:32

标签: sql oracle replace

我有一个如下的emp表

id  name    value
1   a       hel
2   b       dev2
3   c       new3
4   d       can6
5   e       kun8
6   f       luv4

我想在下面的特定位置为值列添加一个字符串

id  name    value
1   a       hel
2   b       devqwe2
3   c       newqwe3
4   d       canqwe6
5   e       kunqwe8
6   f       luvqwe4 

请在选择查询时给我任何帮助

3 个答案:

答案 0 :(得分:1)

UPDATE,对吧?

update emp set
  value = case when id = 2 then 'devqwe2'
               when id = 3 then 'newqwe3'
               etc.
          end;

我看不到任何允许您自动 进行操作的模式(或者,至少对我来说不明显)。如果存在从 source target 的规则,请加以解释。

[编辑,看到@a_horse的评论后;很明显,如果您注意的话...]

SQL> WITH emp (id, name, VALUE)
  2       AS (SELECT 1, 'a', 'hel' FROM DUAL
  3           UNION ALL
  4           SELECT 2, 'b', 'dev2' FROM DUAL
  5           UNION ALL
  6           SELECT 3, 'c', 'new3' FROM DUAL)
  7  SELECT id,
  8         name,
  9         VALUE,
 10         CASE
 11            WHEN REGEXP_LIKE (VALUE, '\d$')
 12            THEN
 13                  REGEXP_SUBSTR (VALUE, '^[[:alpha:]]+')
 14               || 'qwe'
 15               || REGEXP_SUBSTR (VALUE, '\d+$')
 16            ELSE
 17               VALUE
 18         END
 19            new_value
 20    FROM emp;

        ID N VALU NEW_VALUE
---------- - ---- -----------
         1 a hel  hel
         2 b dev2 devqwe2
         3 c new3 newqwe3

SQL>

答案 1 :(得分:1)

您可以使用regexp_replace()'qwe'插入最后一个数字的前面(如果有的话):

select 
    id, 
    name, 
    case when regexp_like(value, '\d+$')
        then regexp_replace(value, '^(\w+)(\d+)$', '\1' || 'qwe' || '\2')
        else value
    end value
from emp

如果value以数字结尾,则regexp_replace()在数字前插入'qwe'。如果没有,则value保持不变。

如果您想要update

update emp
set value = regexp_replace(value, '^(\w+)(\d+)$', '\1' || 'qwe' || '\2')
where regexp_like(value, '\d+$')

Demo on DB Fiddle

ID | NAME | VALUE  
-: | :--- | :------
 1 | a    | hel    
 2 | b    | devqwe2
 3 | c    | newqwe3
 4 | d    | canqwe6
 5 | e    | kunqwe8
 6 | f    | luvqwe4

答案 2 :(得分:0)

正如您在问题中标记replace一样,因此我建议相应的答案:

SELECT REPLACE(t.value, 'dev2', 'devqwe2'),
       REPLACE(t.value, 'new3', 'newqwe3')
etc...
  FROM emp t

但是,即使您能告诉我们更改值规则的方式,也可以避免编写很多replace语句

SELECT REGEXP_REPLACE (t.value, '^(\w+)(\d+)$', '\1' || 'qwe' || '\2')
FROM emp t where regexp_like(t.value, '\d+$');