Печать строк текущего месяца, а затем оставшихся месяцев года - PullRequest
3 голосов
/ 12 января 2012

Я хотел бы сделать запрос, который показывает текущий месяц в текстовой форме, а затем остаток года, напечатанный в следующих строках, до тех пор, пока не будут напечатаны все месяцы года.трудно объяснить, поэтому я сделал следующий пример.Я знаю, что следующий код нелеп, но это единственный способ, которым я знаю, сделать это с моим текущим уровнем квалификации.В идеале я также хотел бы, чтобы месяцы были преобразованы из печати целого числа, чтобы вывести символьное значение месяца (поэтому 1 будет январь).Я знаю, что мог бы сделать это с делом / когда, но я уверен, что есть лучший способ, с которым я еще не сталкивался.

declare @currentmonth as int = datepart(month, getdate())
select
    @currentmonth
union
select
    @currentmonth +1
union
select
    @currentmonth +2
union
select
    @currentmonth +3
union
select
    @currentmonth +4
union
select
    @currentmonth +5
union
select
    @currentmonth +6
union
select
    @currentmonth +7
union
select
    @currentmonth +8
union
select
    @currentmonth +9
union
select
    @currentmonth +10
union
select
    @currentmonth +11

Ответы [ 3 ]

4 голосов
/ 12 января 2012

В SQL Server 2008+ вы можете использовать это

SELECT v.i
FROM (values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)) v(i)
WHERE v.i>=MONTH(GETDATE())
3 голосов
/ 12 января 2012

Возможность использовать общее табличное выражение (SQL Server 2005 +):

declare @adate datetime
set @adate = '2011-07-31'

;with clndr(m) as (
    select @adate
    union all
    select dateadd(month, 1, m)
    from clndr
    where datepart(year, dateadd(month, 1, m)) = datepart(year, @adate)
)
select datename(month, m)
from clndr
1 голос
/ 12 января 2012

С помощью общего табличного выражения вы можете легко написать код

    DECLARE @currentmonth INT
    SET @currentmonth=datepart(month, getdate())
    ;WITH CTE AS
    (SELECT @currentmonth AS currentmonth 
       UNION ALL 
     SELECT currentmonth +1 FROM CTE WHERE currentmonth <10
    )

    SELECT * FROM CTE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...