我需要得到一個帶引號的逗號分隔串列,我幾乎到了這一點,但我得到一個帶逗號的串列,但開頭有一個前導空格,但在第一個引號和字串之間。
select stuff((select distinct ',' '''' str(bid) '''' from dbo.Companies
where IdCompany in (select substring(ID_COMPANY,1,LEN(ID_COMPANY)-2) from
sql.Companies where SEGMENT = @Segment and STATE = 'ACTIVE')
FOR XML PATH('')) , 1 , 1 , '' )
我得到這樣的東西:
' 500004600',' 500005200',' 500009600',' 500021500'
如何洗掉左側空間以便我得到:
'500004600','500005200','500009600','500021500'
uj5u.com熱心網友回復:
這記錄在STR()功能上
長度
是總長度。這包括小數點、符號、數字和空格。默認值為 10。
你沒有指定一個值,所以它的間距是 10。
您應該CAST改為varchar. 一個更簡單的選擇,當你無論如何都有連接時,使用CONCATwhich 也將轉換它。
您還應該洗掉
DISTINCTand useGROUP BY bid,否則無法使用索引和其他優化(因為連接)。
SELECT STUFF((
SELECT CONCAT(',''', c.bid, '''')
FROM dbo.Companies c
WHERE c.IdCompany in (
SELECT SUBSTRING(c2.ID_COMPANY, 1, LEN(c2.ID_COMPANY) - 2)
FROM sql.Companies c2
WHERE c2.SEGMENT = @Segment
AND c2.STATE = 'ACTIVE'
)
GROUP BY
c.bid
FOR XML PATH('')
) , 1 , LEN(',') , '' )
另外,如果您要連接可能存在 XML 轉義問題的字串,則需要
FOR XML PATH(''), TYPE
).value('text()[1]','varchar(max)') , 1 , LEN(',') , '' )
顯然,在較新版本的 SQL Server 中,您可以只使用STRING_AGG
SELECT STRING_AGG(CONCAT('''', c.bid, ''''), ',')
FROM dbo.Companies c
WHERE c.IdCompany in (
SELECT SUBSTRING(c2.ID_COMPANY, 1, LEN(c2.ID_COMPANY) - 2)
FROM sql.Companies c2
WHERE c2.SEGMENT = @Segment
AND c2.STATE = 'ACTIVE'
)
GROUP BY
c.bid
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/474574.html
