在项目中有遇到这样的问题,就是查询的输入字符串是否包含一个规定格式字符串中。
比如说:查询 1002 是否包含在 '1001,1002,1003' 中。
可以通过很多种方式实现。我这里使用函数实现。如下:
[code="sql"]set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author:
-- Create date:
-- Description:
-- =============================================
ALTER FUNCTION [dbo].[IsAllIn]
(
@STR1 VARCHAR(500), ------主字符串(规定格式,如:'1002,1003,1005')
@STR2 VARCHAR(500), ------子串(如:1002)
@CHAR VARCHAR(10) ------分割符(如:',')
)
RETURNS INT
AS
BEGIN
DECLARE @C1 VARCHAR(50)
DECLARE @ReturnValue INT
SET @ReturnValue=1
WHILE(@ReturnValue=1)
BEGIN
IF(LEN(@STR2)=0 OR @STR2 IS NULL)
BEGIN
BREAK
END
SELECT @C1=CASE WHEN CHARINDEX(@CHAR,@STR2,1)-1>=0 THEN SUBSTRING(@STR2,1,CHARINDEX(@CHAR,@STR2,1)-1) ELSE @STR2 END
IF(@CHAR+@STR1+@CHAR NOT LIKE '%'+@CHAR+@C1+@CHAR+'%')
BEGIN
SET @ReturnValue=-1
END
SELECT @STR2=CASE WHEN CHARINDEX(@CHAR,@STR2,1)=0 THEN ''
WHEN LEN(@STR2)-CHARINDEX(@CHAR,@STR2,1)-LEN(@CHAR)+1>=0
THEN SUBSTRING(@STR2,CHARINDEX(@CHAR,@STR2,1)+LEN(@CHAR),LEN(@STR2)-CHARINDEX(@CHAR,@STR2,1)-LEN(@CHAR)+1)
ELSE NULL END
END
RETURN @ReturnValue
END
执行:SELECT [dbo].[IsAllIn]('1002,1008,1003','1002',',') AS RESULT
返回-1说明主字符串不包含字串。 返回1说明主字符串包含字串。
这样程序中通过返回标识即可判断。
原文发表:
西安seo