Oracle SQL Developer 3.1.07使用listagg字符之间的多余空格 [英] Oracle SQL Developer 3.1.07 extra spaces between characters using listagg
问题描述
我在11g数据库上使用SQL Developer 3.1.07 当我使用listagg从字段中提取多个值时,在listagg列的结果中,每个字符之间都有一个空格.该查询返回我希望看到的所有值,只是多余的空间使我发疯.有什么想法吗?
I am using SQL Developer 3.1.07 on an 11g database When I use listagg to extract multiple values from a field I get a space between each character in the results for the listagg column. The query returns all the values I expect to see, it's just the extra spaces that are driving me nuts. Any thoughts?
这是我使用过的一个查询,但是每次我在查询中使用listagg时都会发生:
Here is one query that I have used, but it happens everytime I use listagg in a query:
select a.personnum Emp_ID
, a.personfullname Name
, a.companyhiredtm Hire_Date
, a.employmentstatus Status
, a.employmentstatusdt Status_Date
, h.Supervisor, h.Agency
from vp_employeev42 a
left outer join (select f.personid
, listagg (g.personcstmdatatxt, ',') within group
(order by g.customdatadefid) Supervisor
from vp_employeev42 f
left outer join personcstmdata g
on f.personid = g.personid
where f.personnum like 'T%'
and f.homelaborlevelnm3 = '1872'
and (g.customdatadefid = '1'
or g.personcstmdatatxt is null)
group by f.personid) h
on a.personid = h.personid
left outer join (select f.personid
, listagg (g.personcstmdatatxt, ',')
within group (order by g.customdatadefid) Agency
from vp_employeev42 f
left outer join personcstmdata g
on f.personid = g.personid
where f.personnum like 'T%'
and homelaborlevelnm3 = '1872'
and (g.customdatadefid = '3'
or g.personcstmdatatxt is null)
group by f.personid) h
on a.personid = h.personid
where personnum like 'T%'
and homelaborlevelnm3 = '1872'
order by personnum;
这是我得到的结果:
EMP_ID,NAME,HIRE_DATE,STATUS,STATUS_DATE,SUPERVISOR,AGENCY
T98999,Lxxxxm, Lxxxn,20-SEP-12,Active,20-SEP-12,, S t a f f m a r k
T98989,Fxxxxn, Dxxxxa,10-DEC-12,Active,10-DEC-12,, S t a f f m a r k
T99989,Hxxxs, Cxxxxxa,02-OCT-12,Active,02-OCT-12,, S t a f f m a r k
T99999,Hxxxs, Dxxxn,30-JAN-12,Terminated,21-MAY-12, C x x x x x x x x x r T x x x x r, P R O L O G I S T I X
推荐答案
您是否有机会使用UTF-16
+ NVARCHAR2
?例如:
are you using UTF-16
+ NVARCHAR2
by any chance? eg this:
SQL> select * from nls_database_parameters where parameter='NLS_NCHAR_CHARACTERSET';
PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_NCHAR_CHARACTERSET AL16UTF16
SQL> drop table test;
Table dropped.
SQL> create table test(a nvarchar2(10));
Table created.
SQL> insert into test values ('test');
1 row created.
SQL> insert into test values ('test 2');
1 row created.
SQL> select listagg(a, ',') within group (order by 1) from test group by 1;
LISTAGG(A,',')WITHINGROUP(ORDERBY1)
--------------------------------------------------------------------------------
t e s t, t e s t 2
您可以将其转换为char来解决此问题.如果不能接受,则需要在Oracle支持下提出要求.
you could cast to a char to get round this. IF this is not acceptible, you need to raise a ticket with Oracle support.
SQL> select listagg(to_char(a),',') within group (order by 1) from test group by 1;
LISTAGG(TO_CHAR(A),',')WITHINGROUP(ORDERBY1)
--------------------------------------------------------------------------------
test,test 2
SQL>
这篇关于Oracle SQL Developer 3.1.07使用listagg字符之间的多余空格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!