检查姓氏是否是名字的一部分

时间:2019-06-22 11:39:42

标签: oracle-sqldeveloper

我正在研究数据标准化规则,其中一个规则说:“如果姓氏是名字的一部分,则从名字中删除姓氏”。 我的查询-如何使用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

请帮助

2 个答案:

答案 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结束);