问一个关于查询的有关问题
问一个关于查询的问题
数据库有N条数据,其中A字段的内容是
记录1 商品1|商品3|商品2
记录2 商品5|商品6|商品1|商品8
.......
记录N 商品1|商品7
现在得到字符串“商品3|商品2|商品1”
如何把对应记录1查询出来 ?
------解决方案--------------------
通过一个表值函数来实现吧
代码如下
数据库有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
END
RETURN
END
go
--测试数据