法一:
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 ...