1

こんにちは、たとえば 10/31/2013 などの日付を取得する関数を作成しようとしています。これから 31 である日を取り、1 月から始まるよりも 12 か月の日付のリストを取得します。

1/31/2013
2/30/2013
.....
...
12/31/2013

を使用してその日の部分を取得できます

            declare @day integer 
            set @day=day(GetDate());

while look を使用して、各月を作成できます。しかし、それを行うより良い方法があるかどうか疑問に思っています。助けてください

4

2 に答える 2

0

個人的には、@ t-clausenの答えのシンプルさが魅力的ですが、再帰的なソリューションも好む傾向があります。月の長さが変動する方法を考えると、単一の月を繰り返し追加することはできないことに注意してください(...そして2月は定期的に全員を失望させます...)。私はこのようなことを試したかもしれないと思います:

WITH Cycle_Dates (startOn, cycleStart, monthsElapsed)
                 as (SELECT startOn, startOn, 1
                     FROM Cycle
                     UNION ALL
                     SELECT startOn, DATEADD(month, monthsElapsed, startOn), monthsElapsed + 1
                     FROM Cycle_Dates
                     WHERE monthsElapsed < 13)
SELECT cycleStart
FROM Cycle_Dates

(私は今、私を正直に保つために、可能な場合はSQL Fiddle の例を投稿する必要があると考えています)。

于 2013-10-18T08:16:12.067 に答える