我正在研究数据标准化规则,其中一个规则说:“如果姓氏是名字的一部分,则从名字中删除姓氏”。 我的查询-如何使用oracle sql developer检查名列中是否有姓氏?
我尝试使用:
select fst_nm, lst_nm from emp where fst_nm = fst_nm || lst_nm ;
但是此查询返回“ 0”结果。
此外,我尝试了另一个查询:
select fst_nm, lst_nm, regexp_substr(fst_nm, '[^ ]+',1,1) from emp ;
我尝试使用以下查询
select fst_nm, lst_nm from emp where fst_nm = fst_nm || lst_nm ;
但是此查询不返回任何内容,我的意思是结果为“ 0”。
此外,我尝试了另一个查询:
select fst_nm, lst_nm, regexp_substr(fst_nm, '[^ ]+',1,1) from emp ;
预期结果是:
fst_nm = john smith ;
lst_nm = smith
显示的实际结果是:
fst_nm = john ;
lst_nm = smith
请帮助
答案 0 :(得分:1)
您应该可以在整个桌子上进行一次毯子式替换:
UPDATE emp
SET fst_nm = REPLACE(fst_nm, lst_nm, '');
之所以可行,是因为对于那些姓氏 not 不会作为名字一部分出现的记录,替换将无效。否则,姓氏将从名字中去除。
答案 1 :(得分:0)
您可以使用以下逻辑
选择length('saurabh rai'),instr('saurabh rai',''),当length('saurabh rai')> instr('saurabh rai','')然后substr('saurabh', 1,instr('saurabh rai','')-1)else'saurabh rai'结尾为对偶;
更新emp set fst_nm =(如果length(fst_nm)> instr(fst_nm,'')然后substr(fst_nm,1,instr(fst_nm,'')-1)否则fst_nm结束);