我有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