重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
自己写一个函数吧:
创新互联建站主营昔阳网站建设的网络公司,主营网站建设方案,App定制开发,昔阳h5微信小程序开发搭建,昔阳网站营销推广欢迎昔阳等地区企业咨询
create or replace function f_test(num integer) return varchar2 is
i integer;
resultStr varchar2(100);
begin
for i in 1 .. num loop
resultStr := resultStr || ' ';
end loop;
return resultStr;
end f_test;
如要8个空格:
select decode(b,null,f_test(8),rpad(b,8)) from tablename
SQL SELECT regexp_replace(888997.78,'(\d|.)','\1 ') col FROM dual;
COL
------------------
8 8 8 9 9 7 . 7 8
SQL
后面的 \1 是引用正则表达式的第一个组
create table 表名
(id int,
name varchar2(10) default ' ');
其中default ' '则代表默认空格。
第一个字段的类型是char(10),它的特点是如果插入的数据不足10位,它都会用空格补足,所以第一条数据的第一个字段被检索出来后是10个空格
你可以试一下
select replace(a,' ','n') from test1;
这里将空格替换为字符n,第一行的结果应该是10个n,第二、三行还是你想要的数据么?
replace(a.xxxx,' ','');把空格替换为空
一般空格就是一个空,\t这种空格我没见过不知道你说的是哪种,一般特殊字符不是用\表示的,比如换行符的表示方法是chr(13)
第一个问题,VARCHAR2是变长,不会补,但是CHAR会补。所以VARCHAR2的'SDF'跟'SDF
'记录不一样。
第二个问题,你那个where
name
=
'变量值'就搜的是变量值靠左的,对于CHAR类型ORACLE会自动截掉后面的空格,对于VARCHAR2类型不会截。
具体的匹配是什么算法我太知道,不过猜想WHERE的时候CHAR类型是截掉后面的空格,前面的不会截。如果你用CHAR类型,'JOHN'
跟'JOHN
'是一样的记录,本身CHAR会自动用空格填补后面的位置