Sql 函数将单元格中的任何字符串值根据其长度返回到新行?
现在我有这张桌子: 名字 ----- 账单 詹姆斯 ----- 我的目标是根据这些名称的长度将其重复插入新行 比如说 名字 ----- 账单 账单 账单 账单 詹姆斯 詹姆斯 詹姆斯 詹姆斯 詹姆斯 另外,我要找出是否有一种方法可以处理它,只使用诸如where、have…等过滤器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
提前感谢。您可以使用递归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个字符长得多,那么基于集合的方法将比这样的迭代方法快得多。好的,理解了,谢谢!