我正在寻找一种在TSQL SELECT
语句中重复字符串文字N次的方法,其中N是我从表中的列中选择(或计算)的整数。
我正在做的,特别是将分层树结构解析为嵌套的HTML无序列表。所以,假设我们在树中非常深,但下一个条目非常浅。我们需要从树中较高的位置关闭一堆打开的<ul>
和<li>
标记。所以我所做的(但我觉得太过愚蠢)是:
select case Depth-Next_Depth
when -1 then ''
when 0 then ''
when 1 then '</ul></li>'
when 2 then '</ul></li></ul></li>'
when 3 then '</ul></li></ul></li></ul></li>'
...
end
from MyTable
我知道我可以创建像ReturnClosingTags(@N int)
这样的标量函数,但我不想为数据库添加另一个对象。我希望所有这些都发生在select语句中,所以我不必进一步修改数据库模式。
我也知道我的整个方法(自己编写代码以将我的树解析为HTML)可能是难以理解的,所以可以随意评论......但我对这个问题感兴趣,所以即使你说&#34; duh只是使用.NET库XYZ这个&#34;我想知道这个小小的SQL难题是否有答案。
答案 0 :(得分:3)
SQL Server恰好内置了此功能:replicate()
。
select replicate('</ul></li>', depth)
因为它返回与第一个参数相同的类型,所以您可能希望cast()
的值为varchar(8000)
或varchar(max)
。