通过>拆分SQL服务器查询

时间:2015-03-03 07:48:27

标签: sql sql-server database sql-server-2008


我有Product表,类别路径的值为“2210> 2215> 2219”,依此类推。其中2210,2215,2219是类别表中的类别ID。

很少有类别在数据库中处于非活动状态,并在类别表中维护。

要在类别路径中查找具有非活动类别的产品,我希望编写一个查询。

我希望做这样的事情:

select  p.* from product p, category c
where c.categoryId in (split(p.categoryPath,'>'));

基本上应该按'>'拆分类别路径并且在“in”中返回几个字符串。 有什么方法可以拆分它,并在上面的查询的子句中传入单独的字符串吗?

1 个答案:

答案 0 :(得分:1)

试试这个

创建一个功能

 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,'>'));