需求是这样的:

SELECT EID,
RESEARCHER --研究员
FROM NEWSADMIN.REP_BASINFO A
WHERE RESEARCHER NOT LIKE '%,%' AND LENGTH(RESEARCHER)>3

为保持数据格式的统一性,将以上执行出来的结果中人员之间的空格替换成英文状态下的逗号。替换的时候需注意,有些人员之间是两个空格符,避免出现连续两个",,"的情况。

查询后发现,确实存在不少有多空格的情况。

所以分析了下,有几种情况:

1.首尾空格,用trim处理

select  EID,
RESEARCHER,trim(researcher)from NEWSADMIN.REP_BASINFO A
WHERE RESEARCHER LIKE '% ' or   RESEARCHER LIKE ' %' AND LENGTH(RESEARCHER)>3;


2.长空格,用replace处理,突然发现有个外文,steven smith,所以不能直接替换。因为researcher字段是nvarchar2类型,所以不能简单使用lengthb来判断,不过变通下,就可以了。


update NEWSADMIN.REP_BASINFO A
set RESEARCHER=replace(RESEARCHER,'   ',',')
WHERE RESEARCHER LIKE '%   %' AND LENGTH(RESEARCHER)>3
and length(RESEARCHER)<>lengthb(to_char(RESEARCHER)) ;
update NEWSADMIN.REP_BASINFO A
set RESEARCHER=replace(RESEARCHER,'  ',',')
WHERE RESEARCHER LIKE '%  %' AND LENGTH(RESEARCHER)>3
and length(RESEARCHER)<>lengthb(to_char(RESEARCHER)) ;


3.短空格,大胆使用replace,再无意外。


update NEWSADMIN.REP_BASINFO A
set RESEARCHER=replace(RESEARCHER,' ',',')
WHERE RESEARCHER LIKE '% %' AND LENGTH(RESEARCHER)>3
and length(RESEARCHER)<>lengthb(to_char(RESEARCHER)) ;