Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak dostarczyć ciąg z listą wartości do instrukcji IN?

Degan.

Nie musisz tworzyć rzeczywistej tabeli. Możesz użyć funkcji o wartości tabeli i użyć jej w zapytaniu, np. jak poniżej.

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

Korzysta z TVF z http://www.eggheadcafe.com/ społeczność/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. Zagadka SQL, jak wybrać ostatnią datę dla części, ale tylko 1 wiersz na część (unikatowy)

  2. Jak mogę uzyskać zrzut SQL bazy danych SQL Server 2008?

  3. Najszybszy sposób na usunięcie znaków nienumerycznych z VARCHAR w SQL Server

  4. Funkcje ciągów SQL Server (pełna lista)

  5. Najszybszy sposób na to zapytanie (Jaka jest najlepsza strategia) biorąc pod uwagę zakres dat