J'ai ID
en tant que varchar. Je dois diviser en virgule après que j'ai besoin de convertir la liste en int32. J'ai ajouté un exemple comme ci-dessous.Ms Sql Split et Convert
DECLARE @List varchar(255)
SET @List = '1, 2, 3, 4, 5, 6'
print @List
J'ai ID
en tant que varchar. Je dois diviser en virgule après que j'ai besoin de convertir la liste en int32. J'ai ajouté un exemple comme ci-dessous.Ms Sql Split et Convert
DECLARE @List varchar(255)
SET @List = '1, 2, 3, 4, 5, 6'
print @List
Vous pouvez essayer quelque chose comme:
DECLARE @List varchar(255) = '1, 2, 23, 4, 5, 6'
DECLARE @X XML
SELECT @X = '<myxml><nodes><n>' +
REPLACE(@List,',','</n></nodes><nodes><n>') +
'</n></nodes></myxml>'
--SELECT @X
SELECT LTRIM(C.value('n[1]','VARCHAR(50)')) AS item1
FROM @X.nodes('/myxml/nodes') Cols (C)
Résultats:
| ITEM1 |
--------|--
| 1 |
| 2 |
| 23 |
| 4 |
| 5 |
| 6 |
Remarque: si vous avez des espaces entre les numéros selon vos données d'échantillon (2 3
), vous pouvez utiliser Replace()
fonction de les supprimer avant de convertir en INT. IsNumeric() fonction peut également être utile (s'il vous plaît lire la section note de la fonction isnumeric() pour plus de détails).
I sont adaptés à partir d'un script p.s.w.g's answer qui divise une chaîne en un tableau de mémoire int:
CREATE FUNCTION [dbo].[SplitToIntList]
(@string nvarchar(4000)
, @delim nvarchar(100))
RETURNS
@result TABLE ([Value] int NULL)
AS
BEGIN
DECLARE @str nvarchar(4000)
, @pos int
, @prv int = 1
SELECT @pos = CHARINDEX(@delim, @string)
WHILE @pos > 0
BEGIN
SELECT @str = SUBSTRING(@string, @prv, @pos - @prv)
INSERT INTO @result SELECT CAST(@str AS INT)
SELECT @prv = @pos + LEN(@delim)
, @pos = CHARINDEX(@delim, @string, @pos + 1)
END
INSERT INTO @result SELECT CAST(SUBSTRING(@string, @prv, 4000) AS INT)
RETURN
END
HTH