SQL in(x,y,z)时自动补全单引号

由于项目中经常会用到在查询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
原文地址:https://www.cnblogs.com/leeafei/p/6386241.html