[英]How to separate (split) string with comma in SQL Server stored procedure
我有一個checkboxlist
。 所選(已選中)項目存儲在List<string> selected
。
例如,選擇的值是monday,tuesday,thursday
,7天
我正在將List<>
轉換為以逗號分隔的string
,即
string a= "monday,tuesday,thursday"
現在,我將此值作為字符串傳遞給存儲過程。 我想解雇像:
Select *
from tblx
where days = 'Monday' or days = 'Tuesday' or days = 'Thursday'`
我的問題是:如何在存儲過程中分離字符串?
如果您將逗號分隔(任何分隔符)字符串傳遞給存儲過程並在查詢中使用,那么必須吐出該字符串然后您將使用它。
下面有例子:
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)
嘗試這個
CREATE FUNCTION Split
(
@delimited nvarchar(max),
@delimiter nvarchar(100)
) RETURNS @t TABLE
(
-- Id column can be commented out, not required for sql splitting string
id int identity(1,1), -- I use this column for numbering splitted parts
val nvarchar(max)
)
AS
BEGIN
declare @xml xml
set @xml = N'<root><r>' + replace(@delimited,@delimiter,'</r><r>') + '</r></root>'
insert into @t(val)
select
r.value('.','varchar(max)') as item
from @xml.nodes('//root/r') as records(r)
RETURN
END
GO
用法:
select * from tblx where days in (select val from dbo.split('monday,tuesday,thursday',','))
我想你想要這個
SELECT * FROM tblx where days in ('Monday','Tuesday','Thursday')
你可以這樣得到它:
var a = "monday,tuesday,thursday";
var sql = string.Format("Select * from tblx where days IN ('{0}')", string.Join("','",a.Split(new[] {','})));
嘗試這個:
CREATE FUNCTION [dbo].[ufnSplit] (@string NVARCHAR(MAX))
RETURNS @parsedString TABLE (id NVARCHAR(MAX))
AS
BEGIN
DECLARE @separator NCHAR(1)
SET @separator=','
DECLARE @position int
SET @position = 1
SET @string = @string + @separator
WHILE charindex(@separator,@string,@position) <> 0
BEGIN
INSERT into @parsedString
SELECT substring(@string, @position, charindex(@separator,@string,@position) - @position)
SET @position = charindex(@separator,@string,@position) + 1
END
RETURN
END
然后使用這個功能,
Select *
from tblx
where days IN (SELECT id FROM [dbo].[ufnSplit]('monday,tuesday,thursday'))
我面臨同樣的問題,我一直嘗試但沒有得到預期的解決方案。 最后我確實喜歡跟隨。 試試希望它會起作用......
create Function [dbo].[Split]
(
@RowData NVARCHAR(MAX),
@SplitOn NVARCHAR(5)
)
RETURNS @RtnValue TABLE
(
Id INT IDENTITY(1,1),
Data NVARCHAR(100)
)
AS
BEGIN
DECLARE @Cnt INT
SET @Cnt = 1
WHILE (Charindex(@SplitOn,@RowData)>0)
BEGIN
INSERT INTO @RtnValue (data)
SELECT Data = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1)))
SET @RowData = Substring(@RowData,Charindex(@SplitOn,@RowData)+1,len(@RowData))
SET @Cnt = @Cnt + 1
END
INSERT INTO @RtnValue (data)
SELECT Data = ltrim(rtrim(@RowData))
RETURN
END
並在商店程序中放置這樣的代碼。
select @ActualTarget= count(*) from UpdateVisitDetails where CreatedBy IN (SELECT [DATA] FROM [dbo].[Split](@AllDATS,',' ))
我有同樣的問題。 我試過這個..這是正確的運行
ALTER FUNCTION [dbo].[Split]
(
@List varchar(max),
@SplitOn nvarchar(5)
)
RETURNS @RtnValue table
(
Id int identity(1,1),
Value nvarchar(max)
)
AS
BEGIN
IF (len(@List) <=0)
Begin
Return
End
While (Charindex(@SplitOn,@List)>0)
Begin
Insert Into @RtnValue (value)
Select
Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))
Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
End
Insert Into @RtnValue (Value)
Select Value = ltrim(rtrim(@List))
Return
END
Run :
SELECT * FROM dbo.Split('Apple,Banana,Mango',',')
輸出:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.