TSQL выбрать строку, повторяется N раз

0

Я ищу способ, внутри оператора 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, поэтому мне не нужно дополнительно модифицировать схему DB.

Я также знаю, что весь мой подход здесь (написание кода для разбора моего дерева в HTML) может быть ограниченным, поэтому не стесняйтесь комментировать альтернативу... но меня интересует вопрос сам по себе, поэтому даже если вы говорите: "Дух просто использует библиотеку.NET XYZ для этого". Я хотел бы узнать, есть ли ответ на эту маленькую загадку SQL.

Теги:
sql-server
tsql

1 ответ

3
Лучший ответ

У SQL Server есть встроенная функция: replicate().

select replicate('</ul></li>', depth)

Поскольку он возвращает тот же тип, что и первый аргумент, вам может понадобиться сначала cast() значение в varchar(8000) или varchar(max).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню