如何用 Unit Only After 作为关键字替换 Feature Name have Unit word?

How to replace Feature Name have Unit word by Unit Only After as Keyword?

我使用 SQL Server 2012 并遇到一个问题:我无法将包含 Unit 单词的功能替换为仅 Unit。

所以这个代码returns

'FamilyUnit' as [FamilyUnit] 

虽然我需要它

 'FamilyUnit' as [Unit]

作为关键字后的意思词如果包含Unit,则应该只有Unit

更改将在 AS 关键字之后。

create table #SplitNumberAndUnitsFinal
(
     DKFeatureName nvarchar(100),
     DisplayOrder int
)

insert into #SplitNumberAndUnitsFinal (DKFeatureName, DisplayOrder)
values ('package', 1), ('packageUnit', 1),
       ('Family', 2), ('FamilyUnit', 2),
       ('parts', 3), ('partsUnit', 3)

DECLARE @Header nvarchar(max) =  
    (SELECT SUBSTRING((SELECT ', ''' + DKFeatureName + ''' AS ['+ DKFeatureName +']' AS [text()]
     FROM #SplitNumberAndUnitsFinal 
     GROUP BY DKFeatureName
     ORDER BY MIN(DisplayOrder)
     FOR XML PATH ('')), 2, 10000) [Columns])

PRINT @Header 

预期结果是将所有包含 Unit 的单词替换为仅 Unit,因此输出应为:

 'package' as [package], 
 'packageUnit' as [Unit], 
 'Family' as [Family], 
 'FamilyUnit' as [Unit],  
 'parts' as [parts], 
 'partsUnit' as [Unit]

使用 CASE 表达式:

DECLARE @Header nvarchar(max) =  
    (SELECT SUBSTRING((SELECT ', ''' + DKFeatureName + ''' AS '
        + QUOTENAME(CASE WHEN DKFeatureName LIKE '%Unit' THEN 'Unit' ELSE DKFeatureName END) AS [text()]
     FROM #SplitNumberAndUnitsFinal 
     GROUP BY DKFeatureName
     ORDER BY MIN(DisplayOrder)
     FOR XML PATH ('')), 2, 10000) [Columns])

对于引用标识符,使用 QUOTENAME 函数比添加 []

更安全

db<>fiddle demo