आप एक संख्या तालिका (master..spt_values) और stuff
एक पाश में साथ ऐसा कर सकते
"sql"
है।
declare @Word varchar(10) = 'sql'
declare @T table
(
Word varchar(10)
)
insert into @T values (@Word)
while not exists(select *
from @T
where Word = replicate('-', len(@Word)))
begin
insert into @T(Word)
select distinct stuff(T.Word, N.number, 1, '-')
from @T as T
cross join
master..spt_values as N
where N.type = 'P' and
N.number between 1 and len(@Word) and
stuff(T.Word, N.number, 1, '-') not in (select Word from @T)
end
select *
from @T
http://data.stackexchange.com/stackoverflow/q/122334/
या आप एक reqursive उपयोग कर सकते हैं CTE
declare @Word varchar(10) = 'sql'
;with C as
(
select @Word as Word,
0 as Iteration
union all
select cast(stuff(Word, N.number, 1, '-') as varchar(10)),
Iteration + 1
from C
cross join
master..spt_values as N
where N.type = 'P' and
N.number between 1 and len(@Word) and
Iteration < len(@Word)
)
select distinct Word
from C
http://data.stackexchange.com/stackoverflow/q/122337/
अद्यतन
पुनरावर्ती CTE संस्करण वास्तव में poi के रूप में धीमी है एक टिप्पणी में ओपी द्वारा nted बाहर nted। 7 अक्षरों वाला एक शब्द का उपयोग सीटीई से 960800 पंक्तियां लौटा दी गई हैं।
स्रोत
2011-12-21 06:51:09
+1 पर काम कर देखें और आप आदेश है कि ओपी –
@ConradFrix चाहता है में उत्पादन मिला - क्रम जानबूझकर :) नहीं था। –
दूसरा उत्तर अच्छा है लेकिन "उदाहरण" इनपुट स्ट्रिंग के लिए समय 28 सेकंड है, पहला जवाब बहुत अच्छा है और "उदाहरण" इनपुट स्ट्रिंग के लिए समय 0 सेकंड – jozi