解决
我需要解析并拆分作为参数的表函数字符串,如下所示:
'125','369','125' etc.
现在最终拆分应如下所示:
125
369
125
然而,我做不到,''因为SQL会认为它是另一个参数,所以当我将字符串传递给函数时,我必须使用转义序列这样做:
其中第一个参数是要拆分的字符串,第二个参数是拆分它的位置。
然而,结果是:
051','052','053
而不是
125
369
125
我认为这需要在SQL Server遇到“问题”的情况下做得更多。转义序列而不是函数代码本身。
FU
答案 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来获得所需的结果。
答案 2 :(得分:0)
如果125,369,125
的输入数据有效,但现在你得到'125','369','125'
并且它不起作用,则无需担心转义任何内容或弄乱分隔符。只需在传入数据之前清理数据。在这种情况下,从输入字符串中删除所有单引号是一件简单的事情:
REPLACE(@InputCSV, '''', '')
使用如下:
SELECT * FROM SPLIT_MY_STRING(REPLACE(@InputCSV, '''', ''), ',');