十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Oracle使用函数将一个字符里的字母去掉:
丹东网站制作公司哪家好,找成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设等网站项目制作,到程序开发,运营维护。成都创新互联公司自2013年创立以来到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联公司。
select case when regexp_like(字段名,'.([a-z]+|[A-Z])') then '包含字母' else '不包含字母' end
from 表名字
正则表达式函数:regexp_like
关键的参数是第二个:'.([a-z]+|[A-Z])'其中.表示匹配任何单字符,换行符除外
[a-z]是小写字母|或[A-Z]大写字母
1.首先是去除空格在进行比较(比如,把姓名中的所有空格去除):
Update table_name set xm=replace(xm , ' ') ;
如果要查找哪些记录含有' ',可用相关的语句查找。
然后可进行比较。
2.但是我们可能会发现,有些姓名中间或末尾还有类似空格的字符没被去掉,但它们显然已经不是一般的空格了,那么怀疑是Tab健作怪。于是参照网上说的去掉TAB键的办法来处理,用chr(9)来替代空格键(TAB键的ASCII值为9)。先取一条带有类空格字符的记录来做实验:
SELECT replace(xm, chr(9) ) from table_name where bh=’xxx’;
用这个办法会去掉一些真正的Tab键空格,然后采取批量更新的办法。
3.但我遇到的情况没有这么幸运,没能去掉类空格键。怎么办呢?我决定尝试先取得这个类空格键的ASCII码值,然后再用chr(ASCII码值)的方法来处理。
①.取得含类空格键整个字符串的长度 length(),从而确定出类空格键在字符串中的起始位置、类空格键的长度。
②.求出类空格键的ASCII码值:ascii(substr(xm,n,m)); n为类空格键的起始位置;m为长度。
③.SELECT replace(xm, chr(第②步求得的ASCII码值) ) from table_name where bh=’xxx’;
问题得以解决。但我发现,上述第②步求得的ASCII码值为41377,这应该是一个汉字的ASCII码值,看起来又像空格,于是我怀疑,会不会是中文状态下的空格键、TAB键?尝试之后发现不是。我又怀疑,是不是全角、半角的区别?因为我们一般输入字符,是在半角下输入的。我按照第一步“1.首先是去除空格在进行比较……”尝试,输入全角下的空格,进行查找,结果惊喜出现,原来所有未剔除掉的类空格,是全角状态下输入的空格,并接证实了全角下输入的空格,其ASCII码值为41377。
这个函数的功能主要是用于去除给定字符串中重复的字符串.在使用中需要指定字符串的分隔符.示例:
str := RemoveSameStr('zhang,Zhang,bao,Bao,bao,zhang', ',');
输出: zhang,Zhang,bao,Bao
--SQL
str varchar2(1000);
currentIndex number;
startIndex number;
endIndex number;
type str_type is table of varchar2(30) index by binary_integer;
arr str_type;
Result varchar2(1000);
begin
-- 空字符串
if oldStr is null then
return('');
end if;
--字符串太长
if length(oldStr) 1000 then
return(oldStr);
end if;
str := oldStr;
currentIndex := 0;
startIndex := 0;
loop
currentIndex := currentIndex + 1;
endIndex := instr(str, sign, 1, currentIndex);
if (endIndex = 0) then
exit;
end if;
arr(currentIndex) := trim(substr(str,
startIndex + 1,
endIndex - startIndex - 1));
startIndex := endIndex;
end loop;
--取最后一个字符串:
arr(currentIndex) := substr(str, startIndex + 1, length(str));
--去掉重复出现的字符串:
for i in 1 .. currentIndex - 1 loop
for j in i + 1 .. currentIndex loop
if arr(i) = arr(j) then
arr(j) := '';
end if;
end loop;
end loop;
str := '';
for i in 1 .. currentIndex loop
if arr(i) is not null then
str := str || sign || arr(i);
--数组置空:
arr(i) := '';
end if;
end loop;
--去掉前面的标识符:
Result := substr(str, 2, length(str));
return(Result);
end RemoveSameStr;
转载,仅供参考。