Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment séparer (fractionner) une chaîne avec une virgule dans une procédure stockée SQL Server

Si vous passez la chaîne séparée par des virgules (n'importe quel séparateur) pour stocker la procédure et l'utiliser dans la requête, vous devez donc cracher cette chaîne et vous l'utiliserez ensuite.

Ci-dessous un exemple :

DECLARE @str VARCHAR(500) = 'monday,tuesday,thursday'
CREATE TABLE #Temp (tDay VARCHAR(100))
WHILE LEN(@str) > 0
BEGIN
    DECLARE @TDay VARCHAR(100)
    IF CHARINDEX(',',@str) > 0
        SET  @TDay = SUBSTRING(@str,0,CHARINDEX(',',@str))
    ELSE
        BEGIN
        SET  @TDay = @str
        SET @str = ''
        END
  INSERT INTO  #Temp VALUES (@TDay)
 SET @str = REPLACE(@str,@TDay + ',' , '')
 END

 SELECT * 
 FROM tblx 
 WHERE days IN (SELECT tDay FROM #Temp)