由于项目中经常会用到在查询SQL的时候用到 字段 in( xx ) 的情况,但是每次在组织SQL的时候都会 大量使用 "'"+ x + "'" 这样写代码无疑非常操蛋。
所以我想到不如直接带入所有参数格式为 a,b,c 不用 ' 符号, 然后在SQL里面写一个函数将 a,b,c 分解为 'a','b','c' 或者分解为一个表也可以让in成立。
一、a,b,c 组合为 'a','b','c'
-----------------------------string DECLARE @INPUT NVARCHAR(200) DECLARE @CHAR NVARCHAR(200) = ',' DECLARE @RESULT NVARCHAR(200) = '' DECLARE @INPUTLENGTH INT SET @INPUT = 'my,name,is,afei' SET @INPUTLENGTH = LEN(@INPUT) WHILE CHARINDEX(@CHAR,@INPUT) <> 0 BEGIN -- 截取一个到','的字符串x 并格式成 'x' SELECT @RESULT += char(39) + substring(@INPUT,1,CHARINDEX(@CHAR,@INPUT)-1)+ char(39)+ @CHAR -- 截取被截取后的字符串 ,@INPUT = SUBSTRING(@INPUT,CHARINDEX(@CHAR,@INPUT,0)+LEN(@CHAR),LEN(@INPUT)) -- 当最后截取的字符串为不包含隔断符号','时,直接加上单引号返回 IF CHARINDEX(@CHAR,@INPUT) = 0 SELECT @RESULT += char(39) + @INPUT+ char(39) RETURN @RESULT END a,b,c 分
二、a,b,c 分解为表
-----------------------------table DECLARE @CHAR NVARCHAR(200) DECLARE @INPUT NVARCHAR(200) DECLARE @List TABLE (item VARCHAR(8000)) SET @CHAR = ',' SET @INPUT = 'my,name,is,afei' BEGIN DECLARE @sItem VARCHAR(8000) WHILE CHARINDEX(@CHAR,@INPUT,0) <> 0 BEGIN -- 截取一个到','的字符串 SELECT @sItem=SUBSTRING(@INPUT,1,CHARINDEX(@CHAR,@INPUT,0)-1), -- 截取被截取后的字符串 @INPUT=SUBSTRING(@INPUT,CHARINDEX(@CHAR,@INPUT,0)+LEN(@CHAR),LEN(@INPUT)) IF LEN(@sItem) > 0 INSERT INTO @List SELECT @sItem END -- 添加最后一个字符串 IF LEN(@INPUT) > 0 INSERT INTO @List SELECT @INPUT RETURN END