需求是这样的:
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)) ;
转载于:https://blog.51cto.com/gundam/1213941