需求是这样的:
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)) ;