SqlServer-STUFF拼接字符串(转义字符)解决办法

本文探讨了在创建报表时如何处理字体要求,特别是确保字母使用新罗马字体,汉字使用宋体。在处理集合数据时遇到转义字符问题,通过使用STUFF函数和特殊字符拼接导致报表显示异常。经过研究,发现在数据库中直接存储数据不会出现转义问题,作者猜测将拼接字符串设为NVARCHAR类型可能避免此问题。最后,展示了经过优化的代码片段,成功解决了报表显示不正常的情况。
摘要由CSDN通过智能技术生成

1.需求

我们的客户对于报表的要求很高,对于所有的字母和数字都要新罗马字体,对于汉字要求是宋体,那么我们的数据是如下的情况,要显示在table上怎么办
在这里插入图片描述
基于上面的问题我们做了个字体的处理
在这里插入图片描述
如果用上面的办法可以解决问题

2.问题

我们遇到个问题因为我们的数据是个集合,一个字段显示的可能是多条数据,我们使用了stuff函数,出现了转义字符
在这里插入图片描述
所以我们的报表显示不正常。

3.解决

通过查询资料特殊拼接字符会出现转义字符stuff急救室特殊拼接函数。
但是我们发现数据库自己的数据是不会被转义的如下图
在这里插入图片描述

4.猜想

如果我们把拼接转换的字符串设置一个数据库NVARCHAR的类型是否还会出现
下面展示一些 内联代码片

select Sort,PaName,Unit,MLPName ,
VALUE_S = stuff((select ',' +  CASE WHEN CHARINDEX(N'未检出(定量限', t.VALUE_S) 
                = 1 THEN N'<span style="font-family:宋体">未检出(定量限:</span><span style="font-family:Times New Roman">' + replace(replace(t.VALUE_S,
                 N'未检出(定量限:', ''), N')', '') 
                + N'</span><span style="font-family:宋体">)</span>' WHEN CHARINDEX(N'未检出(检出限', t.VALUE_S) 
                = 1 THEN N'<span style="font-family:宋体">未检出(检出限:</span><span style="font-family:Times New Roman">' + replace(replace(t.VALUE_S,
                 N'未检出(检出限:', ''), N')', '') + N'</span><span style="font-family:宋体">)</span>' WHEN ISNUMERIC(t.VALUE_S) 
                = 1 OR
                CHARINDEX(N'<', t.VALUE_S) 
                = 1 THEN N'<span style="font-family:Times New Roman">' + t.VALUE_S + N'</span>' ELSE N'<span style="font-family:宋体">'
                 + t.VALUE_S + N'</span>' END  from [RndSuite].[RndtScPa] t where  t.PA=b.PA and t.SC in(
select SC from[RndSuite].[RndtScAu] where VALUE=N'1Z19QT138A'and AU=11)  for XML path(''),TYPE).value('.','NVARCHAR(MAX)')  , 1 , 1 , '')
 from[RndSuite].[RndtScPa]b 
 join  [dbo].[Report_Template] c on  b.PA=c.PaId
 where  b.SC in(
select SC from[RndSuite].[RndtScAu] where VALUE=N'1Z19QT138A'and AU=11)
and  c.SampleTypeName=N'星飞帆3段幼儿配方奶粉听装700g' and  c.PaId is not null
group by PA_SHORT_DESC,PA,DESCRIPTION,PA,c.Sort,c.PaName,c.Unit,c.MLPName 
 order by c.Sort

核心函数

select SC from[RndSuite].[RndtScAu] where VALUE=N'1Z19QT138A'and AU=11)  for XML path(''),TYPE).value('.','NVARCHAR(MAX)')  , 1 , 1 , '')
下面代码是借鉴过来的
,TYPE).value('.','NVARCHAR(MAX)')

意思是给查询出的值设置一个类型为NVARCHAR
优化完成如下图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

因为有你更精彩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值