[英]Oracle SQL Developer 3.1.07 extra spaces between characters using listagg
我在11g數據庫上使用SQL Developer 3.1.07當我使用listagg從字段中提取多個值時,我在listagg列的結果中的每個字符之間得到一個空格。 查詢返回我期望看到的所有值,它只是讓我瘋狂的額外空格。 有什么想法嗎?
這是我使用過的一個查詢,但每次在查詢中使用listagg時都會發生這種情況:
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
嗎? 例如:
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
你可以投射到一個字符來繞過這個。 如果這不可接受,您需要提供Oracle支持的票證。
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>
這是目前已知的錯誤,沒有修復:
錯誤13501087 11.2.0.3 RDBMS 11.2.0.3 SQL執行PRODID-5 PORTID-226
摘要:LISTAGG返回STRANGE數據
*** 12/14/11 05:12 am *** (ADD: Impact/Symptom->WRONG RESULTS )
SubComponent: SQL Analytics
===========================
DETAILED PROBLEM DESCRIPTION
============================
When using LISTAGG function with NVARCHAR , data is returned with spaces
between characters
在Oracle 12c上,我遇到了LISTAGG
功能的問題。 我使用ASCIISTR()
來解決它:
SELECT LISTAGG(TRIM(ASCIISTR(NVL(Name,''))), ';')
WITHIN GROUP (ORDER BY NAME) AS Names
在這里工作得很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.