In
działa tylko z zestawów wartości, a nie ze znaków w ciąg. Aby technicznie odpowiedzieć na twoje pytanie, jedynym sposobem, w jaki możesz to zrobić, jest utworzenie zestawu wartości reprezentujących trzy wartości "aaa", "bbb" & "ccc", a następnie umieszczenie tych trzech wartości w tabeli (tabela lub tabela Temp. zmienna (SQL Server), a następnie wykonaj IN wobec tego zbioru wartości (przed tabelą:
declare @Vals table (value varchar(20))
insert @vals(Value) Values('aaa')
insert @vals(Value) Values('bbb')
insert @vals(Value) Values('ccc')
select * from SomeOtherTable
Where SomeColumn IN (Select value from @vals)
aby utworzyć zestaw będzie trzeba utworzyć pusty temp tabeli lub zmiennej tabeli trzymać ten zestaw wartości , przeanalizuj ciąg rozdzielany przecinkami na poszczególne wartości i wprowadź te indywidualne wartości do zmiennej tabeli lub tabeli:
Mimo że nie mówisz, jeśli używasz programu SQL Server, to jest to SQL Server Us er określonej funkcji (UDF), która będzie analizować rozdzielany ciąg i zwraca tablicę z jednym rzędem dla każdej wartości delimted:
przypadku utworzenia UDF, wtedy można wykorzystać go w następujący sposób:
select * from SomeOtherTable
Where SomeColumn IN
(Select sVal from
dbo.ParseSTring(@communityDesc, ','))
/****** Object: UserDefinedFunction [dbo].[ParseString]
Script Date: 4/8/2016 1:53:00 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[ParseString] (@S Text, @delim VarChar(5))
Returns @tOut Table
(ValNum Integer Identity Primary Key,
sVal VarChar(8000))
As
Begin
Declare @dLLen TinyInt -- Length of delimiter
Declare @sWin VarChar(8000)-- Will Contain Window into text string
Declare @wLen Integer -- Length of Window
Declare @wLast TinyInt -- Boolean to indicate processing Last Window
Declare @wPos Integer -- Start Position of Window within Text String
Declare @sVal VarChar(8000)-- String Data to insert into output Table
Declare @BtchSiz Integer -- Maximum Size of Window
Set @BtchSiz = 7900 -- (Reset to smaller values to test routine)
Declare @dPos Integer -- Position within Window of next Delimiter
Declare @Strt Integer -- Start Position of each data value in Window
-- --------------------------------------------------------------
-- ---------------------------
If @delim is Null Set @delim = '|'
If DataLength(@S) = 0 Or
Substring(@S, 1, @BtchSiz) = @delim Return
-- ---------------------------
Select @dLLen = Len(@delim),
@Strt = 1, @wPos = 1,
@sWin = Substring(@S, 1, @BtchSiz)
Select @wLen = Len(@sWin),
@wLast = Case When Len(@sWin) = @BtchSiz
Then 0 Else 1 End,
@dPos = CharIndex(@delim, @sWin, @Strt)
-- ----------------------------
While @Strt <= @wLen
Begin
If @dPos = 0 Begin -- No More delimiters in window
If @wLast = 1 Set @dPos = @wLen + 1
Else Begin
Set @wPos = @wPos + @Strt - 1
Set @sWin = Substring(@S, @wPos, @BtchSiz)
-- -------------------------------------
Select @wLen = Len(@sWin), @Strt = 1,
@wLast = Case When Len(@sWin) = @BtchSiz
Then 0 Else 1 End,
@dPos = CharIndex(@delim, @sWin, 1)
If @dPos = 0 Set @dPos = @wLen + 1
End
End
-- -------------------------------
Set @sVal = LTrim(Substring(@sWin, @Strt, @dPos - @Strt))
Insert @tOut (sVal) Values (@sVal)
-- -------------------------------
-- Move @Strt to char after last delimiter
Set @Strt = @dPos + @dLLen
Set @dPos = CharIndex(@delim, @sWin, @Strt)
End
Return
End
Czy robisz to po prostu w SQL, czy próbujesz skopiować to, co [parametry wycenione tabelą] (https://msdn.microsoft.com/en-us/library/bb675163.aspx) zostały dodane, aby to osiągnąć? –
Którego DBMS używasz? –
** [Sparametryzuj klauzulę SQL IN] (http://stackoverflow.com/questions/337704/parameterize-an-sql-in-clause) ** – lad2025