从字符串TSQL获取数字
作为一个说明,你也可以用递归CTE做到这一点:
with val as (
select '123' as val
),
cte as (
select left(val, 1) as c, substring(val, 2, len(val)) as rest
from val
union all
select left(rest, 1), substring(rest, 2, len(rest))
from cte
where rest <> ''
)
select c
from cte;
查理罗森菲尔德,如果你有像'123'小字符串。我认为你应该使用戈登的解决方案而不是上面的解决方案,这将会更快。 @Gordon Linoff:我对'Gordon'专员吗? 另一方面,我是一位粉丝。我已阅读过您提供的许多解决方案。 –
如果传入一个空字符串,将返回一个空字符串的单行。通过在'cte'中向anchor成员添加'where len(val)> 0',可以轻松地进行更改。出于好奇,我试着改变递归CTE来使用'substring'来提取字符和计数来移动字符串,从而避免了'rest'的开销。结果是:执行计划完全一样。 – HABO
@DeepanshuKalra。 。 。要看哪个更快,你需要做一个时间比较。我添加了这个以防万一使用'master..spt_values'的人感到不舒服。在一个小字符串,它可能会更快,但我不知道。 –
你能给出一个完整的你想要做什么的例子?把它分成几行?列?别的东西? – Mureinik
使用专门设计的工具,如脚本语言。 –