по ходу работы потребовалось вставить строку в t-sql выражение IN. например, на входе есть такая строка: "0001,0808,6695,1234,6578" или подобное.
как следствие родилась небольшая табличная функция.
длину более 10 элементов на скорость работы не проверял.
ну и длина единичного элемента не более varchar(10). ибо в задаче длина 4.
create function dbo.fn_splitFlyingNumbersXML(@str varchar(512),@delimiter varchar(1))
RETURNS @retTbl TABLE (number varchar(4) )
as begin
DECLARE @xml as xml
set @str=replace(@str,' ','')
SET @xml = cast((''+replace(@str,@delimiter ,' ')+' ') as xml)
insert @retTbl
SELECT case when (len(N.value('.', 'varchar(4)'))<4 len="" p="" then="" value="" varchar=""> else N.value('.', 'varchar(4)') end as value FROM @xml.nodes('X') as T(N)
return
end
go
4>
как следствие родилась небольшая табличная функция.
длину более 10 элементов на скорость работы не проверял.
ну и длина единичного элемента не более varchar(10). ибо в задаче длина 4.
create function dbo.fn_splitFlyingNumbersXML(@str varchar(512),@delimiter varchar(1))
RETURNS @retTbl TABLE (number varchar(4) )
as begin
DECLARE @xml as xml
set @str=replace(@str,' ','')
SET @xml = cast(('
insert @retTbl
SELECT case when (len(N.value('.', 'varchar(4)'))<4 len="" p="" then="" value="" varchar=""> else N.value('.', 'varchar(4)') end as value FROM @xml.nodes('X') as T(N)
return
end
go
используется вот так:
select * from Numbers where number in (select * from
dbo.fn_splitFlyingNumbersXML('0001,0808,6695,1234,6578')
)
вариант с разделителем:
create function [dbo].[fn_splitStringXML](@str varchar(512),@delimiter varchar(1))
RETURNS @retTbl TABLE (number varchar(10) )
as begin
DECLARE @xml as xml
set @str=replace(@str,' ','')
SET @xml = cast((''+replace(@str,@delimiter ,' ')+' ') as xml)
insert @retTbl
SELECT N.value('.', 'varchar(10)') as value FROM @xml.nodes('X') as T(N)
return
end

Комментариев нет:
Отправить комментарий