下面是可以在SQL Server中使用的通用脚本。只需修改开始日期和结束日期:

IF EXISTS (SELECT * FROM information_schema.tables WHERE Table_Name = 'Calendar' AND Table_Type = 'BASE TABLE')

BEGIN

DROP TABLE [Calendar]

END

CREATE TABLE [Calendar]

(

[CalendarDate] DATETIME

)

DECLARE @StartDate DATETIME

DECLARE @EndDate DATETIME

SET @StartDate = GETDATE()

SET @EndDate = DATEADD(d, 365, @StartDate)

WHILE @StartDate <= @EndDate

BEGIN

INSERT INTO [Calendar]

(

CalendarDate

)

SELECT

@StartDate

SET @StartDate = DATEADD(dd, 1, @StartDate)

END

如果您想要一个更高级的日历,这是我不久前在网上找到的一个日历:

CREATE SCHEMA Auxiliary

-- We put our auxiliary tables and stuff in a separate schema

-- One of the great new things in SQL Server 2005

go

CREATE FUNCTION Auxiliary.Computus

-- Computus (Latin for computation) is the calculation of the date of

-- Easter in the Christian calendar

-- http://en.wikipedia.org/wiki/Computus

-- I'm using the Meeus/Jones/Butcher Gregorian algorithm

(

@Y INT -- The year we are calculating easter sunday for

)

RETURNS DATETIME

AS

BEGIN

DECLARE

@a INT,

@b INT,

@c INT,

@d INT,

@e INT,

@f INT,

@g INT,

@h INT,

@i INT,

@k INT,

@L INT,

@m INT

SET @a = @Y % 19

SET @b = @Y / 100

SET @c = @Y % 100

SET @d = @b / 4

SET @e = @b % 4

SET @f = (@b + 8) / 25

SET @g = (@b - @f + 1) / 3

SET @h = (19 * @a + @b - @d - @g + 15) % 30

SET @i = @c / 4

SET @k = @c % 4

SET @L = (32 + 2 * @e + 2 * @i - @h - @k) % 7

SET @m = (@a + 11 * @h + 22 * @L) / 451

RETURN(DATEADD(month, ((@h + @L - 7 * @m + 114) / 31)-1, cast(cast(@Y AS VARCHAR) AS Datetime)) + ((@h + @L - 7 * @m + 114) % 31))

END

GO

CREATE TABLE [Auxiliary].[Calendar] (

-- This is the calendar table

[Date] datetime NOT NULL,

[Year] int NOT NULL,

[Quarter] int NOT NULL,

[Month] int NOT NULL,

[Week] int NOT NULL,

[Day] int NOT NULL,

[DayOfYear] int NOT NULL,

[Weekday] int NOT NULL,

[Fiscal_Year] int NOT NULL,

[Fiscal_Quarter] int NOT NULL,

[Fiscal_Month] int NOT NULL,

[KindOfDay] varchar(10) NOT NULL,

[Description] varchar(50) NULL,

PRIMARY KEY CLUSTERED ([Date])

)

GO

ALTER TABLE [Auxiliary].[Calendar]

-- In Celkoish style I'm manic about constraints (Never use em ;-))

-- http://www.celko.com/

ADD CONSTRAINT [Calendar_ck] CHECK (  ([Year] > 1900)

AND ([Quarter] BETWEEN 1 AND 4)

AND ([Month] BETWEEN 1 AND 12)

AND ([Week]  BETWEEN 1 AND 53)

AND ([Day] BETWEEN 1 AND 31)

AND ([DayOfYear] BETWEEN 1 AND 366)

AND ([Weekday] BETWEEN 1 AND 7)

AND ([Fiscal_Year] > 1900)

AND ([Fiscal_Quarter] BETWEEN 1 AND 4)

AND ([Fiscal_Month] BETWEEN 1 AND 12)

AND ([KindOfDay] IN ('HOLIDAY', 'SATURDAY', 'SUNDAY', 'BANKDAY')))

GO

SET DATEFIRST 1;

-- I want my table to contain datedata acording to ISO 8601

-- http://en.wikipedia.org/wiki/ISO_8601

-- thus first day of a week is monday

WITH Dates(Date)

-- A recursive CTE that produce all dates between 1999 and 2020-12-31

AS

(

SELECT cast('1999' AS DateTime) Date -- SQL Server supports the ISO 8601 format so this is an unambigious shortcut for 1999-01-01

UNION ALL                            -- http://msdn2.microsoft.com/en-us/library/ms190977.aspx

SELECT (Date + 1) AS Date

FROM Dates

WHERE

Date < cast('2021' AS DateTime) -1

),

DatesAndThursdayInWeek(Date, Thursday)

-- The weeks can be found by counting the thursdays in a year so we find

-- the thursday in the week for a particular date

AS

(

SELECT

Date,

CASE DATEPART(weekday,Date)

WHEN 1 THEN Date + 3

WHEN 2 THEN Date + 2

WHEN 3 THEN Date + 1

WHEN 4 THEN Date

WHEN 5 THEN Date - 1

WHEN 6 THEN Date - 2

WHEN 7 THEN Date - 3

END AS Thursday

FROM Dates

),

Weeks(Week, Thursday)

-- Now we produce the weeknumers for the thursdays

-- ROW_NUMBER is new to SQL Server 2005

AS

(

SELECT ROW_NUMBER() OVER(partition by year(Date) order by Date) Week, Thursday

FROM DatesAndThursdayInWeek

WHERE DATEPART(weekday,Date) = 4

)

INSERT INTO Auxiliary.Calendar

SELECT

d.Date,

YEAR(d.Date) AS Year,

DATEPART(Quarter, d.Date) AS Quarter,

MONTH(d.Date) AS Month,

w.Week,

DAY(d.Date) AS Day,

DATEPART(DayOfYear, d.Date) AS DayOfYear,

DATEPART(Weekday, d.Date) AS Weekday,

-- Fiscal year may be different to the actual year in Norway the are the same

-- http://en.wikipedia.org/wiki/Fiscal_year

YEAR(d.Date) AS Fiscal_Year,

DATEPART(Quarter, d.Date) AS Fiscal_Quarter,

MONTH(d.Date) AS Fiscal_Month,

CASE

-- Holidays in Norway

-- For other countries and states: Wikipedia - List of holidays by country

-- http://en.wikipedia.org/wiki/List_of_holidays_by_country

WHEN (DATEPART(DayOfYear, d.Date) = 1)          -- New Year's Day

OR (d.Date = Auxiliary.Computus(YEAR(Date))-7)  -- Palm Sunday

OR (d.Date = Auxiliary.Computus(YEAR(Date))-3)  -- Maundy Thursday

OR (d.Date = Auxiliary.Computus(YEAR(Date))-2)  -- Good Friday

OR (d.Date = Auxiliary.Computus(YEAR(Date)))    -- Easter Sunday

OR (d.Date = Auxiliary.Computus(YEAR(Date))+39) -- Ascension Day

OR (d.Date = Auxiliary.Computus(YEAR(Date))+49) -- Pentecost

OR (d.Date = Auxiliary.Computus(YEAR(Date))+50) -- Whitmonday

OR (MONTH(d.Date) = 5 AND DAY(d.Date) = 1)      -- Labour day

OR (MONTH(d.Date) = 5 AND DAY(d.Date) = 17)     -- Constitution day

OR (MONTH(d.Date) = 12 AND DAY(d.Date) = 25)    -- Cristmas day

OR (MONTH(d.Date) = 12 AND DAY(d.Date) = 26)    -- Boxing day

THEN 'HOLIDAY'

WHEN DATEPART(Weekday, d.Date) = 6 THEN 'SATURDAY'

WHEN DATEPART(Weekday, d.Date) = 7 THEN 'SUNDAY'

ELSE 'BANKDAY'

END KindOfDay,

CASE

-- Description of holidays in Norway

WHEN (DATEPART(DayOfYear, d.Date) = 1)            THEN 'New Year''s Day'

WHEN (d.Date = Auxiliary.Computus(YEAR(Date))-7)  THEN 'Palm Sunday'

WHEN (d.Date = Auxiliary.Computus(YEAR(Date))-3)  THEN 'Maundy Thursday'

WHEN (d.Date = Auxiliary.Computus(YEAR(Date))-2)  THEN 'Good Friday'

WHEN (d.Date = Auxiliary.Computus(YEAR(Date)))    THEN 'Easter Sunday'

WHEN (d.Date = Auxiliary.Computus(YEAR(Date))+39) THEN 'Ascension Day'

WHEN (d.Date = Auxiliary.Computus(YEAR(Date))+49) THEN 'Pentecost'

WHEN (d.Date = Auxiliary.Computus(YEAR(Date))+50) THEN 'Whitmonday'

WHEN (MONTH(d.Date) = 5 AND DAY(d.Date) = 1)      THEN 'Labour day'

WHEN (MONTH(d.Date) = 5 AND DAY(d.Date) = 17)     THEN 'Constitution day'

WHEN (MONTH(d.Date) = 12 AND DAY(d.Date) = 25)    THEN 'Cristmas day'

WHEN (MONTH(d.Date) = 12 AND DAY(d.Date) = 26)    THEN 'Boxing day'

END Description

FROM DatesAndThursdayInWeek d

-- This join is for getting the week into the result set

inner join Weeks w

on d.Thursday = w.Thursday

OPTION(MAXRECURSION 0)

GO

CREATE FUNCTION Auxiliary.Numbers

(

@AFrom INT,

@ATo INT,

@AIncrement INT

)

RETURNS @RetNumbers TABLE

(

[Number] int PRIMARY KEY NOT NULL

)

AS

BEGIN

WITH Numbers(n)

AS

(

SELECT @AFrom AS n

UNION ALL

SELECT (n + @AIncrement) AS n

FROM Numbers

WHERE

n < @ATo

)

INSERT @RetNumbers

SELECT n from Numbers

OPTION(MAXRECURSION 0)

RETURN;

END

GO

CREATE FUNCTION Auxiliary.iNumbers

(

@AFrom INT,

@ATo INT,

@AIncrement INT

)

RETURNS TABLE

AS

RETURN(

WITH Numbers(n)

AS

(

SELECT @AFrom AS n

UNION ALL

SELECT (n + @AIncrement) AS n

FROM Numbers

WHERE

n < @ATo

)

SELECT n AS Number from Numbers

)

GO

mysql 生成日历表_如何在SQL中创建100年的日历表相关推荐

  1. sql中日期的比较_如何在SQL中比较日期?

    sql中日期的比较 How to compare date in SQL? For example, the 'users' table has a column 'loggin' which is ...

  2. wordpress 数据库_如何在WordPress中创建视频库(逐步)

    wordpress 数据库 Recently, a user asked us how to create a video gallery in WordPress. WordPress makes ...

  3. wordpress创建_如何在WordPress中创建问卷(简易方式)

    wordpress创建 Do you want to create a questionnaire in WordPress to survey your visitors or collect da ...

  4. html树状图右侧_如何在 Tableau 中创建控制图?

    本文作者:Jose Valero 控制图是用于研究流程如何随时间变化,并确定制造或业务流程是否在统计控制状态下的图表. 我相信这对每家公司来说都是一个有益的工具,所以在这篇文章中,我将尝试如何在 Ta ...

  5. vue 递归创建菜单_如何在Vue中创建类似中等的突出显示菜单

    vue 递归创建菜单 by Taha Shashtari 由Taha Shashtari 如何在Vue中创建类似中等的突出显示菜单 (How to Create a Medium-Like Highl ...

  6. figma下载_如何在Figma中创建逼真的3D对象

    figma下载 by Gbolahan Taoheed Fawale 通过Gbolahan Taoheed Fawale 如何在Figma中创建逼真的3D对象 (How to create reali ...

  7. hive 元数据 自定义_如何在Hive中创建自定义函数UDF及如何直接通过Impala的同步元数据重用UDF的jar文件-阿里云开发者社区...

    如何在Hive中创建自定义函数UDF及使用 如何在Impala中使用Hive的自定义函数 UDF函数开发 使用Intellij工具开发Hive的UDF函数,进行编译: 1.使用Intellij工具通过 ...

  8. java 运费_如何在Java中创建运费成本计算器

    我正在创建计算器来计算运费.代码是这样的:如何在Java中创建运费成本计算器 class ShippingCalc { public static void main(String[] args) { ...

  9. wordpress创建_如何在WordPress中创建子页面

    wordpress创建 Do you want to create a child page on your site? Pages in WordPress can be standalone or ...

最新文章

  1. 702:Crossing River (贪心)
  2. 多进程多线程处理文本数据
  3. 华润置地php面试题_从一流到顶流|2020华润置地与沈阳一起美好
  4. Linux系统扩硬盘,Linux系统硬盘扩容
  5. php gif 切成一帧,GIF动画帧提取器 如何截取gif的每一帧图片
  6. 用例子来区分4种文法
  7. java css是什么_【狂神说JAVA】CSS(通俗易懂版)
  8. python xml解析cdata_python基于xml parse实现解析cdatasection数据
  9. 权御天下计算机音乐数字乐谱,权御天下(单音 适合电吉他)
  10. 今日头条极速版自动脚本_开卷有益——②今日头条极速版
  11. 0805封装尺寸/0402封装尺寸/0603封装尺寸/1206封装尺寸
  12. 联合分布适配(JDA)
  13. 编译原理 —— 四元式和三地址代码
  14. 按夏普计算机技巧,股票投资策略:怎样用夏普比率Sharpe Ratio寻找强势股
  15. 测温监控摄像头_温度湿度远程监控摄像头
  16. 编码器如何推流给虎牙直播平台
  17. FlinkSQL 读写 MySQL
  18. hp 服务器硬盘背板 供电线,100元淘了一个HP 6位硬盘笼+背板+线,准备用旧机改一个DSM。...
  19. 2020-2021学年第二学期期末考试《药用高分子材料》大作业
  20. Logic Pro X for Mac(音乐制作软件)

热门文章

  1. spring cloud 和 dubbo 各自的优缺点
  2. RabbitMQ和Kafka的显著差异(5)
  3. android点击获得坐标,android点击MapView任意一点获得坐标
  4. 经过两个月的面试,我给你整理了这些面试考点(Java版)
  5. 一文搞懂四种同步工具类
  6. RestTemplate实践(及遇到的问题)
  7. Parallels Desktop虚拟机Centos系统安装后联网以及互通宿主机
  8. Mysql过长的Sql语句优化:在循环中调用存储过程运行动态语句
  9. 02.友盟项目--原始日志数据生成
  10. Redis作为缓存服务器