SQL Server:使用','DELIMITER - 表函数拆分字符串

时间:2015-02-19 09:48:33

标签: sql sql-server

解决

我需要解析并拆分作为参数的表函数字符串,如下所示:

'125','369','125' etc.

现在最终拆分应如下所示:

125
369
125

然而,我做不到,''因为SQL会认为它是另一个参数,所以当我将字符串传递给函数时,我必须使用转义序列这样做:

其中第一个参数是要拆分的字符串,第二个参数是拆分它的位置。

然而,结果是:

051','052','053

而不是

125
369
125

我认为这需要在SQL Server遇到“问题”的情况下做得更多。转义序列而不是函数代码本身。

FU

3 个答案:

答案 0 :(得分:0)

试试这个:

create function dbo.split_my_string (@clob_in varchar(max), @delimiter varchar(10)) 
return @SplitValues table (
      pos int not null
    , data varchar(max) not null
)
as
begin

declare @x xml;

set @x = cast ('<x>' + replace (@clob_in, @delimiter, '</x><x>') + '</x>' as xml);

insert into @SplitValues (pos, data)
select row_number() over(order by (select 1))
    , x.x.value('.', 'varchar(max)')
    --, replace (x.x.value('.', 'varchar(max)'), '''', '')
from @x.nodes('x')x(x);

return
end

如果需要,您可以替换撇号。请参阅注释字符串。

答案 1 :(得分:0)

因为我不想更改您的功能代码。另外,我不知道为什么要将转义序列嵌入到数据中。

这是一个可能有用的简单修复,

SELECT * 
FROM SPLIT_MY_STRING(REPLACE('125'',''369'',''125','''',''), REPLACE(''',''','''',''))

在函数调用中使用replace来获得所需的结果。

Fiddler help here.

答案 2 :(得分:0)

如果125,369,125的输入数据有效,但现在你得到'125','369','125'并且它不起作用,则无需担心转义任何内容或弄乱分隔符。只需在传入数据之前清理数据。在这种情况下,从输入字符串中删除所有单引号是一件简单的事情:

REPLACE(@InputCSV, '''', '')

使用如下:

SELECT * FROM SPLIT_MY_STRING(REPLACE(@InputCSV, '''', ''), ',');