Ich dupliziert das meiste Verhalten aus der partition
Dokumentation. Es ist ein ziemlich prägnanter Ausdruck, obwohl ich nicht versucht habe, Bereiche zu behandeln, die negative Zahlen enthalten, weil mir nicht klar ist, ob das zusätzliche Leerzeichen als Minuszeichen oder nur zum Auffüllen verwendet werden soll. Und da ich davon ausgehe, muss stop
streng größer sein als start
und so kann es nicht negativ sein und somit musste ich nicht den Logarithmus von Null nehmen. Meine Version unten passt die Länge entsprechend an, wo der Logarithmus ins Spiel kommt.
Da partition
ein reserviertes Wort in SQL Server ist, möchten Sie wahrscheinlich den Namen ändern. Beachten Sie, dass alle Werte Ganzzahlen sind und die Divisionsoperationen verwendet werden, da der Rest verworfen wird.
create function dbo.[partition] as (
@number int, @start int, @stop int, @interval int
)
returns varchar(32) as begin
return
case
when @number < @start then ' :' + cast(@start - 1 as varchar(10)) + ' '
when @number > @stop then ' ' + cast(@stop + 1 as varchar(10)) + ': '
else
right(
' ' + cast(
@start + (@number - @start)/@interval * @interval as varchar(10)
),
floor(log(@stop)/log(10)) + 2
) + ':' +
right(
' ' + cast(
case
when @start + ((@number - @start)/@interval + 1) * @interval > @stop
then @stop
else @start + ((@number - @start)/@interval + 1) * @interval
end as varchar(10)
),
floor(log(@stop)/log(10)) + 2
)
end
end
Wenn Sie nur die partition
Funktion benötigen Gruppierung fahren Ich könnte argumentieren, nur (@number - @start)/@interval
verwenden (optional in einem case
Ausdruck der „vor dem ersten“ und „nach dem letzten“ zu behandeln reicht.)
Wir sind kein Code Übersetzungsdienst. Sie tun die Konvertierung, wir (vielleicht) versuchen, Hilfe holen die Stücke. –
Ich denke, Sie müssen Ihre eigene gespeicherte Prozedur erstellen - es gibt keine entsprechende T-SQL-Funktion, die ich kenne. – dbmitch
Ja. _Partition_ ist ein Access-Special. – Gustav