如何用sql寫出日曆table

2021-04-17 16:55:22 字數 2503 閱讀 5213

法一:

create function fn_calendar(@date datetime)

returns @t table (日 varchar(2), 一 varchar(2), 二 varchar(2), 三 varchar(2), 四 varchar(2), 五 varchar(2), 六 varchar(2))

asbegin

declare @offset int, @max int

set @date = convert(varchar(6), @date, 112) + '01'

set @offset = (@@datefirst + datepart(weekday, @date) - 1) % 7

set @max = 33 - day(@date + 31)

declare @month table(id tinyint identity, date datetime, week tinyint)

insert @month select top 31 null, null from sysobjects

update @month set date = @date + id - 1, week = (id + @offset - 1) % 7

insert

@tselect

max(case week when 0 then ltrim(id) else '' end),

max(case week when 1 then ltrim(id) else '' end),

max(case week when 2 then ltrim(id) else '' end),

max(case week when 3 then ltrim(id) else '' end),

max(case week when 4 then ltrim(id) else '' end),

max(case week when 5 then ltrim(id) else '' end),

max(case week when 6 then ltrim(id) else '' end)

from

@month

where

id < @max

group by

(id + @offset - 1) / 7

return

endgo

select * from fn_calendar(getdate())

法二:begin

declare @cur_dt datetime

set @cur_dt=getdate()

declare @beg_dt datetime

declare @end_dt datetime

set @beg_dt=dateadd(month,datediff(month,'2000-1-1',@cur_dt),'2000-1-1')

set @end_dt=dateadd(month,1,@beg_dt)

declare @info varchar(1000)

declare @i int

set @info=''

print convert(varchar(10),datepart(year,@cur_dt))+'年'+convert(varchar(10),datepart(month,@cur_dt))+'月日曆:'

print '  ┏━┳━┳━┳━┳━┳━┳━┓'

print '  ┃㈦┃㈠┃㈡┃㈢┃㈣┃㈤┃㈥┃'

print '  ┣━╋━╋━╋━╋━╋━╋━┫'

while @beg_dt <@end_dt

begin

set @i=datepart(weekday,@beg_dt)

if @i=1

begin

if len(@info)>0

begin

print @info

print '  ┣━╋━╋━╋━╋━╋━╋━┫'

endset @info=''

endif len(@info)=0 while @i>0 begin set @info=@info+'  ┃' set @i=@i-1 end

if datepart(day,@beg_dt) <10 set @info=@info+' '+convert(varchar(6),datepart(day,@beg_dt))+'┃'

else set @info=@info+convert(varchar(6),datepart(day,@beg_dt))+'┃' 

set @beg_dt=dateadd(day,1,@beg_dt)

endset @i=datepart(weekday,@beg_dt-1)

while @i <7 begin set @info=@info+'  ┃' set @i=@i+1 end

if len(@info)>0 print @info

print '  ┗━┻━┻━┻━┻━┻━┻━┛'

end

oracle 如何用sql生成日曆

bi分析中,經常需要將事實表與時間維度表關聯起來,按年 月 日來逐層展示,常用的做法是建立一張日曆表,結構類似如下 create table t bas calendar d year number 4 not null d month number 2 not null d day number ...

oracle 如何用sql生成日曆

bi分析中,經常需要將事實表與時間維度表關聯起來,按年 月 日來逐層展示,常用的做法是建立一張日曆表,結構類似如下 create table t bas calendar d year number 4 not null d month number 2 not null d day number ...

oracle 如何用sql生成日曆

bi分析中,經常需要將事實表與時間維度表關聯起來,按年 月 日來逐層展示,常用的做法是建立一張日曆表,結構類似如下 create table t bas calendar d year number 4 not null d month number 2 not null d day number ...