我正在使用MS SQL Server Management Studio。我继承了一个查询,该查询的部分如下所示:
...
ISNULL(
CASE
WHEN LOWER(PersonClass.Detail) LIKE '%student%'
THEN SUBSTRING((
SELECT DISTINCT
' / '+STUDENT_TERM.DEPT_NAME
FROM Warehouse.STUDENT_TERM STUDENT_TERM
INNER JOIN Warehouse.TERM TERM
ON STUDENT_TERM.TERM_CD = TERM.TERM_CD
AND TERM.TERM_START_DT <= @fyEnd
AND ISNULL(TERM.TERM_END_DT, GETDATE()) >= @fyStart
WHERE Persons.DWPersonId = STUDENT_TERM.DWPERSID FOR
XML PATH('')
), 4, 100000)
END, '') AS StudentHome,
...
这是在寻找学生的“家庭部门”。一个学生可能有一个以上的住所,因此上述工作有点像MySQL的group_concat
。
我的问题是有关查询的意外工件。几个部门在数据仓库中都有一些名称,这些名称中嵌入了“&”符号&
,例如:
A & B
尽管查询结果是“ HTML编码”,但将“ A&B”变成“ A&amp; B”。
如果我运行内部查询,则结果与预期的一样,使用简单的&号而不是编码形式。我猜想FOR XML
正在编码。
是否有一种方法可以在不对结果进行编码的情况下进行group_concat
?
您可以从xml中获取值,而不是强制转换为字符串: