--建了一张表

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Bas_DateTime]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Bas_DateTime]
GO

CREATE TABLE [dbo].[Bas_DateTime] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[Rq] [datetime] NULL ,
[YearOfRq] [varchar] (20) NULL ,
[HalfYear] [varchar] (20) NULL ,
[QuarterOfYear] [varchar] (20) NULL ,
[MonthOfYear] [varchar] (20) NULL ,
[WeekOfHalfYear] [varchar] (20) NULL ,
[WeekOfYear] [varchar] (20) NULL ,
[WeekOfQuarter] [varchar] (20) NULL ,
[WeekOfMonth] [varchar] (20) NULL ,
[WeekDay] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

--向表中插入日期
declare @staDate datetime,
@endDate datetime
SET @stadate='2000-01-01' --起始日期
SET @endDate='2051-01-01' --结束日期
while @staDate < @endDate
begin
insert into Bas_DateTime(Rq) values (@stadate)
SET @staDate=@StaDate+1
end
Go

--YearofRq
update Bas_DateTime
set YearOfRq = ltrim(str(cast(Year(Rq)as int)))+'年'
go
--HalfYear
update Bas_DateTime
set HalfYear = case when month(Rq)>6 then '下半年' else '上半年' end
go
/*
--QuarterOfHalfYear
update Bas_DateTime
set QuarterOfHalfYear = case when (month(Rq) between 1 and 3 ) or (month(Rq) between 7 and 9 )then 1 else 2 end
go
*/
--QuarterOfYear
update Bas_DateTime
set QuarterOfYear = case
when (month(Rq) between 1 and 3 ) then '第一季度'
when (month(Rq) between 4 and 6 ) then '第二季度'
when (month(Rq) between 7 and 9 ) then '第三季度'
else '第四季度' end
go
--WeekDay
update Bas_DateTime
set [WeekDay]= DateName(weekday,Rq)
go

--MonthOfHalfYear
/*
update Bas_DateTime
set MonthOfHalfYear = case when (Month(Rq) > 6 ) then (month(Rq)-6) else month(Rq) end
go*/
--MonthOfYear

update Bas_DateTime
set MonthOfYear = ltrim(str(cast(month(Rq)as int)))+'月'
go
--weekofyear
update Bas_DateTime
set WeekOfYear = '第'+ltrim(str(cast(datepart(week,Rq)as int)))+'周'
go

/*declare @ datetime
set @ = '2007-08-09'
select datename(weekday,dateadd(month,datediff(month,0,@),0)) as '周'
*/
-- datediff(day,'2007-08-01','2007-08-02')
-- dateadd(month,datediff(month,0,@),0) ' 所在月的第一天
--dateadd(quarter,datediff(quarter,0,@),0) as 所在季的第一天
-- dateadd(year,year('2007-02-9')-2000,'2000-06-30') 以2000-06-30为基准,以后或得xxxx-06-30

--weekofmonth
update Bas_DateTime
set weekofmonth = case when datename(weekday,dateadd(month,datediff(month,0,rq),0))='星期一' then (case
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<6 then '第1周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<13 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=6 then '第2周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<20 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=13 then '第3周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<27 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=20 then '第4周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<32 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=27 then '第5周'
end )
when datename(weekday,dateadd(month,datediff(month,0,rq),0))='星期二' then( case
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<5 then '第1周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<12 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=5 then '第2周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<19 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=12 then '第3周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<26 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=19 then '第4周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<32 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=26 then '第5周'
end )
when datename(weekday,dateadd(month,datediff(month,0,rq),0))='星期三' then( case
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<4 then '第1周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<11 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=4 then '第2周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<18 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=11 then '第3周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<25 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=18 then '第4周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<32 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=25 then '第5周'
end )
when datename(weekday,dateadd(month,datediff(month,0,rq),0))='星期四' then(case
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<3 then '第1周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<10 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=3 then '第2周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<17 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=10 then '第3周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<24 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=17 then '第4周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<31 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=24 then '第5周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq) >=31 then '第6周'
end )
when datename(weekday,dateadd(month,datediff(month,0,rq),0))='星期五' then(case
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<2 then '第1周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<9 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=2 then '第2周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<16 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=9 then '第3周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<23 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=16 then '第4周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<30 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=23 then '第5周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq) >=30 then '第6周'
end )
when datename(weekday,dateadd(month,datediff(month,0,rq),0))='星期六' then(case
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<1 then '第1周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<8 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=1 then '第2周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<15 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=8 then '第3周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<22 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=15 then '第4周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<29 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=22 then '第5周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq) >=29 then '第6周'
end )
when datename(weekday,dateadd(month,datediff(month,0,rq),0))='星期日' then(case
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<7 then '第1周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<15 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=7 then '第2周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<22 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=15 then '第3周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<29 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=22 then '第4周'
when datediff(day,dateadd(month,datediff(month,0,rq),0),rq)<32 and datediff(day,dateadd(month,datediff(month,0,rq),0),rq)>=29 then '第5周'
end)
end
go

--weekofhalfyear
update Bas_DateTime
set weekofhalfyear = case when month(rq) < 7 then weekofyear
else case
when datename(weekday,dateadd(year,year(rq)-2000,'2000-06-30'))='星期六' then '第'+ltrim(str(cast(datepart(week,Rq)-datepart(week,dateadd(year,year(rq)-2000,'2000-06-30'))as int)))+'周'
else '第'+ltrim(str(cast(datepart(week,Rq)-datepart(week,dateadd(year,year(rq)-2000,'2000-06-30')) + 1 as int)))+'周' end
end
go
--weekofquarter
update Bas_DateTime
set weekofquarter= case
when month(Rq) between 1 and 3 then weekofyear
when month(Rq) between 4 and 6 then case
when datename(weekday,dateadd(year,year(rq)-2000,'2000-03-31'))='星期六' then '第'+ltrim(str(cast(datepart(week,Rq)-datepart(week,dateadd(year,year(rq)-2000,'2000-03-31'))as int)))+'周'
else '第'+ltrim(str(cast(datepart(week,Rq)-datepart(week,dateadd(year,year(rq)-2000,'2000-03-31'))+1 as int)))+'周' end
when month(Rq) between 7 and 9 then weekofhalfyear
when month(Rq) between 10 and 12 then case
when datename(weekday,dateadd(year,year(rq)-2000,'2000-09-30'))='星期六' then '第'+ltrim(str(cast(datepart(week,Rq)-datepart(week,dateadd(year,year(rq)-2000,'2000-09-30'))as int)))+'周'
else '第'+ltrim(str(cast(datepart(week,Rq)-datepart(week,dateadd(year,year(rq)-2000,'2000-09-30'))+1 as int)))+'周' end
end
go
select * from Bas_DateTime order by Rq

转载于:https://www.cnblogs.com/ysjBoke/p/5283839.html

sql server 生成万年历相关推荐

  1. 如何从Microsoft SQL Server生成C#类

    目录 背景 使用代码 背景 如果您没有使用任何ORM工具从数据库生成类,则此过程会消耗大量时间和资源. 此SQL代码使您免于在此类数据操作上浪费时间,并让您专注于代码开发. 现在,您可以轻松地从常见的 ...

  2. Sql Server 生成 Word 文档 表结构

    打开数据库编辑器,输入以下代码并执行(F5) SELECT--表名 = case when a.colorder=1 then d.name else '' end,--表说明 = case when ...

  3. SQL server生成数字表

    通过交叉联结可以生成一个整数数列结果集是非常方便的.这样的数字列是一个非常强大的工具,可以用于多种目的.比如我最常用的就是通过数据表来完成Java的split方法.其他目的也有用过,不过最常用的还是来 ...

  4. sql server生成不重复的时间字符串

    select CONVERT(nvarchar(13),REPLACE(CONVERT(decimal(18,8),GETDATE()),'.',''))

  5. SQL Server将数据导出SQL脚本的方法 转

    SQL Server里面的生成SQL脚本,只会包含数据库及表的字段结构,而不会包含表的数据,也就是SQL脚本里面只有Create database,Create table 这样的语句,没有inser ...

  6. SQL Server 镜像构建

    SQL Server 2005 镜像构建 一.镜像简介 1.1 简介 数据库镜像是将数据库事务处理从一个SQL Server数据库移动到不同SQL Server环境中的另一个SQL  Server数据 ...

  7. 【译】SQL Server索引进阶第八篇:唯一索引

    索引设计是数据库设计中比较重要的一个环节,对数据库的性能其中至关重要的作用,但是索引的设计却又不是那么容易的事情,性能也不是那么轻易就获取到的,很多的技术人员因为不恰当的创建索引,最后使得其效果适得其 ...

  8. SQL Server有这些属性吗

    2019独角兽企业重金招聘Python工程师标准>>> Navicat for SQL Server是一个全面的图形化方式管理数据库,可进行创建.编辑和删除全部数据库对象,例如表.视 ...

  9. 再谈SQL Server中日志的的作用

    简介 之前我已经写了一个关于SQL Server日志的简单系列文章.本篇文章会进一步挖掘日志背后的一些概念,原理以及作用.如果您没有看过我之前的文章,请参阅: 浅谈SQL Server中的事务日志(一 ...

最新文章

  1. 香港理工大学计算机专业课程,香港理工大学 19年入学 计算机硕士信息一览
  2. 都说Djnago框架重,那就让哥用15行代码写个django web程序!
  3. SQL on Linux Run on Docker
  4. Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 't
  5. c+和python的区别-python和c先学哪个
  6. java实现注销登录
  7. 记一次阿里云的面试,止步第三轮,可惜!
  8. java.lang.NoSuchMethodError: org.junit.runner.Description.getClassName()Ljava/lang/String;
  9. 【债券】可转换债券基本概念
  10. creo管道设计教程_Creo产品设计教程:握力器弹簧建模,一个技巧轻松搞定
  11. 2021年中国再生纱市场趋势报告、技术动态创新及2027年市场预测
  12. 如何从JavaScript中的对象数组中获得不同的值?
  13. php访问c#接口,介绍C#中的接口
  14. 使用小波变换进行Pan和多光谱融合
  15. SQL SERVER 查看数据库表的字段类型,是否允许为NULL,默认值,主键等
  16. 矩阵求导法则与性质,机器学习必备~
  17. SQL Server 去除节假日天数,获取实际工作日天数
  18. 二层交换机、三层交换机和路由器的区别
  19. Matlab中将横纵坐标改为自定义标签(set(gca,xtick)set(gca,xticklabel))
  20. Xshell 下载地址

热门文章

  1. 3750交换机简要配置手册(中文)
  2. ubuntu20.04屏幕闪烁与分辨率的问题
  3. superset各种数据库连接地址(持续更新中)
  4. mapPartition方法与map方法的区别(转载)
  5. HDFS/zookeeper/hbase初始化
  6. ubuntu19.10下面的redis的启动与关闭
  7. 在mysql-workbench中运行set和declare并且观察区别
  8. TensorFlow(二)
  9. poi 默认2位小数_odoo小数精确度
  10. Flutter插件开发《Podspec语法整理》