我有一个如下的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
请在选择查询时给我任何帮助
答案 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+$')
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+$');