格式化存储过程中字符串的一部分

时间:2018-02-22 19:04:08

标签: sql-server stored-procedures

我有一个在SQL Server函数中生成的字符串,它返回如下:

        Leone GW
        Leone G
        Thompson J
        Thompson JC

我需要做的是用HTML标记加粗一些存储在另一个表中的名称。名称可以是:

Leone G

这是名称可能存在的不同方式。我需要创建游标和循环吗?然后我也有一个初始或两者的名称问题。在此示例中,我需要将<b>Leone G</b>替换为Thompson JC,将<b>Thompson JC</b>替换为{{1}}

感谢任何帮助或建议

1 个答案:

答案 0 :(得分:4)

这是一种快速方法......本质上是一种标记化替代。

注意:如果要将此技术应用于整个表,则必须将其迁移到UDF中。

  

修改

您可能会注意到子查询中的CROSS JOIN。在这里,您必须添加任何预期的尾随分隔符

示例

Declare @YourTable Table ([SomeCol] varchar(50))
Insert Into @YourTable Values 
 ('Leone GW')
,('Leone G')
,('Thompson J')
,('Thompson JC')


Declare @S varchar(max) = 'Ouseph MM, Li J, Chen HZ, Pécot T, Wenzel P, Thompson JC, Comstock G, Chokshi V, Byrne M, Forde B, Chong JL, Huang K, Machiraju R, de Bruin A, Leone G (2012) Atypical E2F repressors and activators coordinate placental development. <i>Dev Cell</i>. 22(4):849-62 PMCID:PMC3483796'

Select @S=Replace(@S,MapFrom,MapTo)
 From  (
        Select MapFrom = SomeCol+suff
              ,MapTo   = '<b>'+SomeCol+'</b>'+suff
         From  @YourTable B1
         Cross Join (values (' ')
                           ,(',')
                           ,('.')
                    ) B2 (suff)
       ) A

Select @S

<强>返回

Ouseph MM,Li J,Chen HZ,PécotT,Wenzel P, Thompson JC Comstock G,Chokshi V,Byrne M,Forde B,Chong JL,Huang K,Machiraju R,de Bruin A, Leone G (2012)非典型E2F阻遏物和激活剂协调胎盘发育。 Dev Cell 。 22(4):849-62 PMCID:PMC3483796