我有ID
作爲varchar。我需要分割爲逗號後,我需要將列表轉換爲int32。我添加了如下例子。Ms Sql拆分和轉換
DECLARE @List varchar(255)
SET @List = '1, 2, 3, 4, 5, 6'
print @List
我有ID
作爲varchar。我需要分割爲逗號後,我需要將列表轉換爲int32。我添加了如下例子。Ms Sql拆分和轉換
DECLARE @List varchar(255)
SET @List = '1, 2, 3, 4, 5, 6'
print @List
你可以嘗試這樣的:
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)
結果:
| ITEM1 |
--------|--
| 1 |
| 2 |
| 23 |
| 4 |
| 5 |
| 6 |
注意:如果你有一個數字之間的間隔,按您的樣本數據( 2 3
),你可以使用Replace()
函數在轉換爲INT之前將其刪除。 IsNumeric()函數也可能有用(請閱讀isnumeric()函數的註釋部分以獲取更多詳細信息)。
我已經適應從p.s.w.g's answer一個腳本,在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