ほとんどの動作がpartition
ドキュメントから重複しています。負の数を含む範囲を処理しようとはしませんでしたが、余分な空白文字をマイナス記号やパディングに使用するかどうかはわからないため、かなり簡潔な表現です。そして、私はそれを仮定しているので、stop
は厳密にstart
より大きくなければならないので、負であってはならないので、ゼロの対数を取ることを避ける必要はありませんでした。私の下のバージョンでは、対数が作用する場所が適切に長さに適応します。
partition
はSQL Serverの予約語なので、おそらく名前を変更する必要があります。すべての値は整数であり、除算は破棄されるため除算操作が使用されることに注意してください。
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
あなたはちょうど私がちょうど(@number - @start)/@interval
を使用することを主張するかもしれないグループ化駆動するためにpartition
機能を必要とする場合(必要に応じて、「最初の前」と範囲「最後の後に」処理するcase
式で。)
私たちはコード翻訳サービスではありません。あなたは変換を行い、私たちは(おそらく)その断片を手に入れようとします。 –
私はあなた自身のストアドプロシージャを構築する必要があると思います - 私が知っている同等のT-SQL関数はありません。 – dbmitch
_Partition_はAccessスペシャルです。 – Gustav