日期:2014-05-17  浏览次数:20640 次

问一个关于查询的问题
数据库有N条数据,其中A字段的内容是

记录1  商品1|商品3|商品2
记录2  商品5|商品6|商品1|商品8
.......
记录N  商品1|商品7


现在得到字符串“商品3|商品2|商品1”

如何把对应记录1查询出来 ?

------解决方案--------------------
通过一个表值函数来实现吧
代码如下

--相关函数
CREATE FUNCTION [dbo].[fn_SplitStr] 
(
        @String                 NVARCHAR(4000),                         --待分隔的字符串
        @Separator  NVARCHAR(4)                                         --分隔符号
)
RETURNS @strTable TABLE (strVal  NVARCHAR(4000)) --返回字符串列表
AS
BEGIN
        DECLARE
        @Occurrences    INT,
        @Counter                        INT,
        @tmpStr                         NVARCHAR(4000)
 
        SET @Counter = 0
                         
        IF SUBSTRING(@String,LEN(@String),1) <> @Separator 
           SET @String = @String + @Separator
 
        SET @Occurrences = (DATALENGTH(REPLACE(@String,@Separator,@Separator+'#')) -  DATALENGTH(@String))/ DATALENGTH(@Separator)
        SET @tmpStr = @String
         
        WHILE @Counter <= @Occurrences 
        BEGIN
           SET @Counter = @Counter + 1
           IF(LEN(SUBSTRING(@tmpStr,1,CHARINDEX(@Separator,@tmpStr)-1)) > 0)
                   INSERT INTO @strTable VALUES(SUBSTRING(@tmpStr,1,CHARINDEX(@Separator,@tmpStr)-1))
            
           SET @tmpStr = SUBSTRING(@tmpStr,CHARINDEX(@Separator,@tmpStr)+1,4000)
            
           IF DATALENGTH(@tmpStr) = 0
           BREAK
        E