0
String = '45,12,37,89,10,107,64,97'
をカンマで区切られた整数を渡すことによって、最大値を検索し、我々は数字の配列を言うと、それらの値の 最大値を見つけることができます。カンマ区切りの値をとる手順を作成し、ストアドプロシージャに文字列として
String = '45,12,37,89,10,107,64,97'
をカンマで区切られた整数を渡すことによって、最大値を検索し、我々は数字の配列を言うと、それらの値の 最大値を見つけることができます。カンマ区切りの値をとる手順を作成し、ストアドプロシージャに文字列として
以下のようにすることができます。
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', ',')
私は、このメソッドはブックマークしています。ソースを覚えていないが、それは魅力のように機能する。あなたのためにそれを修正しました。試してみてください:
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)
SQL Serverには、複数の値(テーブル、XML、JSON)を保持する**設計**のタイプがあります。また、非常に弱い文字列処理機能もあります。だから、あなたは間違ったタイプの使用に挑戦していますか? –
あなたの質問は本当にCSVデータを別々の行に取得する方法を尋ねています。その時点で質問に答えるのに 'SELECT MAX'が必要です。しかし、これはStack Overflowで既に答えられています。 –