T-SQL生成两个新的真正的公历年历
2008-04-27 06:58
253 查看
--两个新年历
--增加了日期所在月及年的周次!
--星期日要算在"上一周"!(注意WeekOfYear、WeekOfMonth与MyWeekOfYear、MyWeekOfMonth的区别)
--注意datename的值会因语言版本或日期格式有所差异!
--本测试环境为:SQLServer2000简体中文版+Windows简体中文版
declare@datetime
set@='1995-02-2511:00:50'--1995-01-01正好是个星期日
select@as日期
,dateadd(year,datediff(year,0,@),0)as所在年的第一天
,dateadd(year,1+datediff(year,0,@),0)-1as所在年的最后一天
,dateadd(quarter,datediff(quarter,0,@),0)as所在季的第一天
,dateadd(quarter,1+datediff(quarter,0,@),0)-1as所在季的最后一天
,dateadd(month,datediff(month,0,@),0)as所在月的第一天
,dateadd(month,1+datediff(month,0,@),0)-1as所在月的最后一天
,dateadd(week,datediff(week,0,@),0)as所在周的第一天
,dateadd(week,1+datediff(week,0,@),0)-1as所在周的最后一天
selectmonth(min(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))))as月份
,datepart(week,min(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))))asWeekOfYear
,datediff(week
,dateadd(month,datediff(month,0,min(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0))))))),0)
,min(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0))))))
)+1asWeekOfMonth
,casewhendatename(weekday,min(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))))='星期日'
thenmin(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0))))))
elsenullendas星期日
,casewhendatename(weekday,min(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))))='星期一'
thenmin(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0))))))
whendatename(weekday,min(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0))))))+1)='星期一'
anddatediff(month,min(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))),min(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0))))))+1)=01
--增加了日期所在月及年的周次!
--星期日要算在"上一周"!(注意WeekOfYear、WeekOfMonth与MyWeekOfYear、MyWeekOfMonth的区别)
--注意datename的值会因语言版本或日期格式有所差异!
--本测试环境为:SQLServer2000简体中文版+Windows简体中文版
declare@datetime
set@='1995-02-2511:00:50'--1995-01-01正好是个星期日
select@as日期
,dateadd(year,datediff(year,0,@),0)as所在年的第一天
,dateadd(year,1+datediff(year,0,@),0)-1as所在年的最后一天
,dateadd(quarter,datediff(quarter,0,@),0)as所在季的第一天
,dateadd(quarter,1+datediff(quarter,0,@),0)-1as所在季的最后一天
,dateadd(month,datediff(month,0,@),0)as所在月的第一天
,dateadd(month,1+datediff(month,0,@),0)-1as所在月的最后一天
,dateadd(week,datediff(week,0,@),0)as所在周的第一天
,dateadd(week,1+datediff(week,0,@),0)-1as所在周的最后一天
selectmonth(min(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))))as月份
,datepart(week,min(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))))asWeekOfYear
,datediff(week
,dateadd(month,datediff(month,0,min(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0))))))),0)
,min(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0))))))
)+1asWeekOfMonth
,casewhendatename(weekday,min(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))))='星期日'
thenmin(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0))))))
elsenullendas星期日
,casewhendatename(weekday,min(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))))='星期一'
thenmin(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0))))))
whendatename(weekday,min(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0))))))+1)='星期一'
anddatediff(month,min(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))),min(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0))))))+1)=01
相关文章推荐
- T-SQL 生成 两个新的真正的公历年历
- T-SQL 生成 两个新的真正的公历年历
- T-SQL 生成 两个新的真正的公历年历
- T-SQL 生成 两个新的真正的公历年历
- [转]T-SQL 生成一个简易的 公历年历 T-SQL 含日期所在月及年的周次
- T-SQL 生成一个简易的 公历年历 T-SQL 含日期所在月及年的周次
- T-SQL 生成一个简易的 公历年历 T-SQL 含日期所在月及年的周次
- 这几句 SQL 比较长! 没啥实用价值,但也要费费脑子! 权当习题: 《T-SQL 生成公历年历》,仅供收藏!
- T-SQL 生成的公历年历 (写在了存储过程中了)
- T-SQL 生成的公历年历 (写在了存储过程中了)
- T-SQL 生成一个简易的 公历年历 T-SQL 含日期所在月及
- T-SQL生成一个简易的公历年历T-SQL含日期所在月及年的周次
- 比较两个文件不同以及生成SQL插入语句
- 记录两个SQL生成汉字全拼及拼音简码的方法
- 高级SQL生成选项的两个总是灰色
- C#自动给据sql中的带@的变量提取变量名称在从简单数据对象中取得生成SqlParameter数组进行数据插入(利用反射完成)
- 自动生成MOSS Query的SQL语句的工具
- 两条关于生成排名的SQL语句
- js和SQL方式随机生成高强度密码
- Oracle PL/SQL判断两个字段相等或不等问题