用于在视图中的所有列中搜索字符串的SQL函数
我有一个包含99列和rowid的表:用于在视图中的所有列中搜索字符串的SQL函数,sql,tsql,function,view,Sql,Tsql,Function,View,我有一个包含99列和rowid的表: [RowID] [int] NOT NULL, [Col1] [nvarchar](max) NULL, [Col2] [nvarchar](max) NULL, [Col3] [nvarchar](max) NULL, [Col4] [nvarchar](max) NULL, ....... [Col99] [nvarchar](max) NULL 我需要一个可以在Micrsoft SQL Server视图中使用的函数(必须是视图,并且视图中没有变量)
[RowID] [int] NOT NULL,
[Col1] [nvarchar](max) NULL,
[Col2] [nvarchar](max) NULL,
[Col3] [nvarchar](max) NULL,
[Col4] [nvarchar](max) NULL,
.......
[Col99] [nvarchar](max) NULL
我需要一个可以在Micrsoft SQL Server视图中使用的函数(必须是视图,并且视图中没有变量)来搜索唯一字符串,然后在视图中显示为新字段。我目前的方法是使用case语句搜索每一列,直到找到唯一的字符串。这种方法写出来很麻烦(效率很低),我有几个独特的字符串要搜索
SELECT RowID, COALESCE (
CASE WHEN Col1 LIKE '%UniqueString%' THEN Col1 ELSE NULL END,
CASE WHEN Col2 LIKE '%UniqueString%' THEN Col2 ELSE NULL END,
CASE WHEN Col3 LIKE '%UniqueString%' THEN Col3 ELSE NULL END,
CASE WHEN Col4 LIKE '%UniqueString%' THEN Col4 ELSE NULL END,
CASE WHEN Col5 LIKE '%UniqueString%' THEN Col5 ELSE NULL END,
CASE WHEN Col6 LIKE '%UniqueString%' THEN Col6 ELSE NULL END,
………..
CASE WHEN Col99 LIKE '%UniqueString%' THEN Col99 ELSE NULL END) AS [UniequeString]
FROM dbo.TABLE_A
最终视图应具有以下结果:
在您的示例中,
'UNIQUESTRING'
是列的值。如果是这种情况,那么像那样使用就太过分了。你可以做:
select (case when 'UNIQUESTRING' in (col1, col2, . . ., col99) then 'UNIQUESTRING'
end)
select (case when coalesce(col1, col2, . . . col99) like '%UNIQUESTRING%'
then coalesce(col1, col2, . . . col99)
end)
另一种可能性。看起来,UNIQUESTRING
位于每列的第一个非空值中。如果是,您可以执行以下操作:
select (case when 'UNIQUESTRING' in (col1, col2, . . ., col99) then 'UNIQUESTRING'
end)
select (case when coalesce(col1, col2, . . . col99) like '%UNIQUESTRING%'
then coalesce(col1, col2, . . . col99)
end)
在您的示例中,“UNIQUESTRING”
是列的值。如果是这种情况,那么像
那样使用就太过分了。你可以做:
select (case when 'UNIQUESTRING' in (col1, col2, . . ., col99) then 'UNIQUESTRING'
end)
select (case when coalesce(col1, col2, . . . col99) like '%UNIQUESTRING%'
then coalesce(col1, col2, . . . col99)
end)
另一种可能性。看起来,UNIQUESTRING
位于每列的第一个非空值中。如果是,您可以执行以下操作:
select (case when 'UNIQUESTRING' in (col1, col2, . . ., col99) then 'UNIQUESTRING'
end)
select (case when coalesce(col1, col2, . . . col99) like '%UNIQUESTRING%'
then coalesce(col1, col2, . . . col99)
end)
如果有超过10列,则不希望显式指定它。相反,请使用:
示例如果有超过10列,则不希望显式指定它。相反,请使用:
示例那么字符串对于每行只能在一列或零列中?您有几个唯一的字符串要搜索吗?那么,您在输出列UniqueStrings中显示了什么?因此,对于每一行,字符串只能在一列或零列中?您有几个唯一的字符串要搜索吗?然后在“输出”列中显示您要执行的操作UniqueString@user1783736 . . . 这些公式没有作出这种假设。每个返回可能具有该值的第一列。@user1783736。这些公式没有作出这种假设。每个返回可能具有该值的第一列。