在 SQL 服务器查询中拆分 >
Split in SQL server query by >
我有产品 table,类别路径的值为“2210>2215>2219”等等。其中 2210、2215、2219 是来自类别 table.
的类别 ID
在类别 table 维护的数据库中,很少有类别处于非活动状态。
要在类别路径中查找非活动类别的产品,我想编写一个查询。
我想做这样的事情:
select p.* from product p, category c
where c.categoryId in (split(p.categoryPath,'>'));
基本上应该用“>”拆分类别路径,return 我要在 'in' 中传递几个字符串。
有什么办法可以将其拆分并获取要在上述查询的子句中传递的单独字符串?
试试这个
创建函数
CREATE FUNCTION [dbo].[fn_Split](@text varchar(8000), @delimiter varchar(20))
RETURNS @Strings TABLE
(
position int IDENTITY PRIMARY KEY,
value varchar(8000)
)
AS
BEGIN
DECLARE @index int
SET @index = -1
WHILE (LEN(@text) > 0)
BEGIN
SET @index = CHARINDEX(@delimiter , @text)
IF (@index = 0) AND (LEN(@text) > 0)
BEGIN
INSERT INTO @Strings VALUES (@text)
BREAK
END
IF (@index > 1)
BEGIN
INSERT INTO @Strings VALUES (LEFT(@text, @index - 1))
SET @text = RIGHT(@text, (LEN(@text) - @index))
END
ELSE
SET @text = RIGHT(@text, (LEN(@text) - @index))
END
RETURN
END
Sql 查询将是
select p.* from product p, category c
where c.categoryId in (select value from fn_split(p.categoryPath,'>'));
我有产品 table,类别路径的值为“2210>2215>2219”等等。其中 2210、2215、2219 是来自类别 table.
的类别 ID在类别 table 维护的数据库中,很少有类别处于非活动状态。
要在类别路径中查找非活动类别的产品,我想编写一个查询。
我想做这样的事情:
select p.* from product p, category c
where c.categoryId in (split(p.categoryPath,'>'));
基本上应该用“>”拆分类别路径,return 我要在 'in' 中传递几个字符串。 有什么办法可以将其拆分并获取要在上述查询的子句中传递的单独字符串?
试试这个
创建函数
CREATE FUNCTION [dbo].[fn_Split](@text varchar(8000), @delimiter varchar(20))
RETURNS @Strings TABLE
(
position int IDENTITY PRIMARY KEY,
value varchar(8000)
)
AS
BEGIN
DECLARE @index int
SET @index = -1
WHILE (LEN(@text) > 0)
BEGIN
SET @index = CHARINDEX(@delimiter , @text)
IF (@index = 0) AND (LEN(@text) > 0)
BEGIN
INSERT INTO @Strings VALUES (@text)
BREAK
END
IF (@index > 1)
BEGIN
INSERT INTO @Strings VALUES (LEFT(@text, @index - 1))
SET @text = RIGHT(@text, (LEN(@text) - @index))
END
ELSE
SET @text = RIGHT(@text, (LEN(@text) - @index))
END
RETURN
END
Sql 查询将是
select p.* from product p, category c
where c.categoryId in (select value from fn_split(p.categoryPath,'>'));