Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да осигуря низ със списък от стойности към оператор IN

Деган.

Не е нужно да създавате действителна таблица. Можете да използвате функция с таблични стойности и да я използвате във вашата заявка, напр. както по-долу.

(DATEPART(dw, ThisDate) IN (SELECT [item] FROM dbo.fnSplit(@TheseDays, ',')))

Това използва TVF от http://www.eggheadcafe.com/ общност/aspnet/13/10021854/fnsplit.aspx ).

CREATE FUNCTION dbo.fnSplit(
    @sInputList VARCHAR(8000) -- List of delimited items
  , @sDelimiter VARCHAR(8000) = ',' -- delimiter that separates items
) RETURNS @List TABLE (item VARCHAR(8000))

BEGIN
DECLARE @sItem VARCHAR(8000)
WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0
 BEGIN
 SELECT
  @sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))),
  @sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList))))

 IF LEN(@sItem) > 0
  INSERT INTO @List SELECT @sItem
 END

IF LEN(@sInputList) > 0
 INSERT INTO @List SELECT @sInputList -- Put the last item in
RETURN
END
GO



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съхраняване на единични кавички в променлива varchar SQL Server 2008

  2. Поддържа ли SQL Server 2005 datetime2

  3. Проследяване на променени полета без поддържане на история

  4. Намерете не-ASCII знаци в колони varchar с помощта на SQL Server

  5. SSIS, експортиращ данни в плосък файл, изобразява двойните кавички като шестнадесетични знаци