【发布时间】:2016-06-19 10:50:57
【问题描述】:
我有一个带有 Tags 列的表,其中包含如下项目:'server, network, location1'...
我需要找到所有存在“storage”项的记录
和
这些位置中的任何一个都存在('location1', location2, location3')
和
不存在其他项目(即只有“storage”和一个location 或只有“storage”)。
我正在使用一个函数将字符串拆分为多个项目,因此下面代码的 select 语句使用整个字符串的标签和项目的项目将对我有很大帮助。
SELECT cardid, item, tags, count(1) as Total
, result =
case when lower(item) = 'storage' and
lower(item) in 'location1, location2, location3'
then 'yes'
else 'no'
end
FROM myTable
CROSS APPLY dbo.fn_SplitString(Tags, ',')
GROUP BY cardid, item, tags
order by item desc
这是我使用的函数:
CREATE FUNCTION [dbo].[fn_SplitString]
(
@String VARCHAR(8000),
@Delimiter VARCHAR(255)
)
RETURNS
@Results TABLE
(
ID INT IDENTITY(1, 1),
Item VARCHAR(8000)
)
AS
BEGIN
INSERT INTO @Results (Item)
SELECT SUBSTRING(@String+@Delimiter, Number,
CHARINDEX(@Delimiter, @String+@Delimiter, Number) - Number)
FROM Numbers
WHERE Number <= LEN(REPLACE(@String,' ','|'))
AND SUBSTRING(@Delimiter + @String,
Number,
LEN(REPLACE(@delimiter,' ','|'))) = @Delimiter
ORDER BY Number RETURN
END
【问题讨论】:
-
能否请您添加一些示例预期输出,并进一步说明您的要求
-
是的,很抱歉不清楚。输出将是带有字符串“storage”的所有行,或者仅作为内容,也可以带有位置字符串之一,例如:“storage”或“storage,location1”或“location2,storage”。我需要过滤掉所有带有字符串“storage”的行和一些其他文本而不是任何位置。
-
请编辑您的问题以包括相关表格 DDL 语句、作为 DML 语句的示例数据和所需结果。
-
无 DDL。 DML 在上面(我认为)。期望的结果在问题和上面的评论中解释了两次。我只需要有人可以帮助我弄清楚如何只返回字符串中包含特定单词和/或位置的记录...
标签: sql-server tsql