Sql 函数将单元格中的任何字符串值根据其长度返回到新行?

Sql 函数将单元格中的任何字符串值根据其长度返回到新行?,sql,sql-server-2012,Sql,Sql Server 2012,现在我有这张桌子: 名字 ----- 账单 詹姆斯 ----- 我的目标是根据这些名称的长度将其重复插入新行 比如说 名字 ----- 账单 账单 账单 账单 詹姆斯 詹姆斯 詹姆斯 詹姆斯 詹姆斯 另外,我要找出是否有一种方法可以处理它,只使用诸如where、have…等过滤器 提前感谢。您可以使用递归CTE: with cte as ( select name, len(name) as n from t union all select na

现在我有这张桌子:

名字 ----- 账单 詹姆斯 ----- 我的目标是根据这些名称的长度将其重复插入新行

比如说

名字 ----- 账单 账单 账单 账单 詹姆斯 詹姆斯 詹姆斯 詹姆斯 詹姆斯 另外,我要找出是否有一种方法可以处理它,只使用诸如where、have…等过滤器


提前感谢。

您可以使用递归CTE:

with cte as (
      select name, len(name) as n
      from t
      union all
      select name, n - 1
      from cte
      where n > 1
     )
select cte.name
from cte;

是一个数据小提琴。

最简单、最有效的方法是使用数字/理货表

在这里模拟一个称为数字的理货表——理想情况下,这是一个永久性的表,存储从1到百万的数字,或者任何您需要的数字

with digits as (
  select * from (values (1),(2),(3),(4),(5))v(n)
),
T as (
  select 'Bill' [Name] union all select 'James'
)
select t.[Name] 
from T
cross apply digits d
where d.n <= Len(T.[name])

一个名字能有多长时间?A虽然不能创建更多行,但只能对它们进行筛选。您需要使用类似于计数的方法来实现这一点。计数表确实是更可取的基于集合的方法,下面添加了一个示例。注意,如果OP的值比5个字符长得多,那么基于集合的方法将比这样的迭代方法快得多。好的,理解了,谢谢!