2017-10-18 27 views
0
String = '45,12,37,89,10,107,64,97' 

創建需要逗號分隔值的程序最大值,我們可以說數字的排列,找到 最大的價值。查找傳遞逗號分隔的整數作爲字符串中的存儲過程

+0

SQL Server具有**設計用於保存多個值(表,XML,JSON)的**類型。它也有非常弱的字符串處理功能。那麼爲什麼你要設置自己使用錯誤類型的挑戰呢? –

+1

你的問題確實在問如何將CSV數據分成不同的行,在這之後你只需要一個'SELECT MAX'來回答你的問題。但是,Stack Overflow已經解決了這個問題。 –

回答

0

您可以按照以下步驟操作。

創建一個函數來提取數據

CREATE FUNCTION [dbo].[fnSplitString] 
(
     @str as varchar(max), 
     @delimiter as varchar(1) 
) 
RETURNS @TableReturn table(ID integer) 
AS 
BEGIN 
    IF (@str IS NULL or @str ='') 
     BEGIN 
       INSERT INTO @TableReturn SELECT 0 
     END 
    ELSE 
     WHILE (charindex(@delimiter,@str)>0) 
     BEGIN 
      INSERT INTO @TableReturn 
      SELECT SUBSTRING (@str,1,charindex(@delimiter,@str)-1) 
      SET @str = SUBSTRING (@str,charindex(@delimiter,@str)+1, len(@str)) 
     END 
     IF (@str <> '' and @str <> ',') 
     BEGIN 
      INSERT INTO @TableReturn SELECT @str 
     END 
    RETURN 
END 

然後調用它:

SELECT TOP(1)* FROM dbo.fnSplitString('45,12,37,89,10,107,64,97', ',') ORDER BY ID DESC 

要不然:

SELECT MAX(ID) FROM dbo.fnSplitString('45,12,37,89,10,107,64,97', ',') 
0

我有這樣的方法書籤。不記得來源,但它的作用就像魅力。已經爲你修改它。請嘗試:

Create table #Testdata(Data varchar(max)) 
Insert #Testdata select '45,12,37,89,10,107,64' 


;with tmp(DataItem, Data) as (
select LEFT(Data, CHARINDEX(',',Data+',')-1), 
     STUFF(Data, 1, CHARINDEX(',',Data+','), '') 
from #Testdata 
union all 
select LEFT(Data, CHARINDEX(',',Data+',')-1), 
     STUFF(Data, 1, CHARINDEX(',',Data+','), '') 
from tmp 
where Data > '' 
) 
select max(cast(DataItem as int)) 
from tmp 
OPTION (maxrecursion 0) 
相關問題