知道年份和月份,如何求出 1.这个月有多少天,2.这个月末是几号.前一月的月末是几号?后一月的月末是几号?
解决方案 »
- 帮忙看一下Case When Then的sql语句..
- 一个关于不同数据库之间进行数据操作的问题!!邹老大等各位大侠请进!!!!!!!
- 数据查询问题
- 请教高手:---------------------表间数据复制
- 传入表名的存储过程如何操作?
- 如何添加ODBC源中的用户DSN
- 请教一个数据库表覆盖的问题
- 本来以为解决,连分都放了贴也结了 可是...(xml to database)
- 百分求教 mssql 如何实现优化?从哪几方面入手?老板不懂技术,如何证明给他看,性能确实优化了
- 求救!
- left/inner join
- 【全文索引问题】在建立全为了索引后想修改noise.chs文件,系统提示无法创建noise.chs文件!
select getdate() 当前日期-- 上月日期范围
select
convert(varchar(7) ,dateadd(month ,-1 , getdate()),121)+ '-01' 上月起始日期,
convert(varchar(10),dateadd(day , -1 , cast(convert(varchar(7) ,getdate(),121)+ '-01' as datetime)) ,120)-- 取本月日期范围
select
convert(varchar(7) ,getdate(),120)+ '-01' 本月起始日期,
convert(varchar(10),dateadd(day , -1 , cast(convert(varchar(7) ,dateadd(month , 1 , getdate()),120)+ '-01' as datetime)),120)-- 下月日期范围
select
convert(varchar(10),cast(convert(varchar(7),dateadd(month , 1 , getdate()),120)+ '-01' as datetime),120) as 下月起始日期,
convert(varchar(10),dateadd(day , -1 , cast(convert(varchar(7) ,dateadd(month , 2 , getdate()),120)+ '-01' as datetime)),120)
set @year =2006
set @month =9
--1
select datediff(day,rtrim(@year)+'-'+rtrim(@month)+'-1',rtrim(@year+@month/12)+'-'+rtrim((@month+1)%12)+'-1')
--2
select datepart(day,dateadd(day,-1,rtrim(@year+@month/12)+'-'+rtrim((@month+1)%12)+'-1'))
--后面的参照上面
set @年份=2006
set @月份=9--1.这个月有多少天,
select datediff(day,dateadd(month,@月份-1,dateadd(year,@年份-2000,'2000-01-01')),dateadd(month,@月份,dateadd(year,@年份-2000,'2000-01-01'))) as 天数
--or:
select datepart(day,dateadd(day,-1,dateadd(month,@月份,dateadd(year,@年份-2000,'2000-01-01')))) as 天数--2.这个月末是几号.前一月的月末是几号?后一月的月末是几号?
select datepart(day,dateadd(day,-1,dateadd(month,@月份,dateadd(year,@年份-2000,'2000-01-01')))) as 月末是几号,
datepart(day,dateadd(day,-1,dateadd(month,@月份-1,dateadd(year,@年份-2000,'2000-01-01')))) as 前一月的月末是几号,
datepart(day,dateadd(day,-1,dateadd(month,@月份-1,dateadd(year,@年份-2000,'2000-01-01')))) as 后一月的月末是几号
--结果
天数
-----------
30(所影响的行数为 1 行)天数
-----------
30(所影响的行数为 1 行)月末是几号 前一月的月末是几号 后一月的月末是几号
----------- ----------- -----------
30 31 31(所影响的行数为 1 行)
set @年份=2006
set @月份=9--1.这个月有多少天,
select datediff(day,dateadd(month,@月份-1,dateadd(year,@年份-2000,'2000-01-01')),dateadd(month,@月份,dateadd(year,@年份-2000,'2000-01-01'))) as 天数
--or:
select datepart(day,dateadd(day,-1,dateadd(month,@月份,dateadd(year,@年份-2000,'2000-01-01')))) as 天数--2.这个月末是几号.前一月的月末是几号?后一月的月末是几号?
select datepart(day,dateadd(day,-1,dateadd(month,@月份,dateadd(year,@年份-2000,'2000-01-01')))) as 月末是几号,
datepart(day,dateadd(day,-1,dateadd(month,@月份-1,dateadd(year,@年份-2000,'2000-01-01')))) as 前一月的月末是几号,
datepart(day,dateadd(day,-1,dateadd(month,@月份+1,dateadd(year,@年份-2000,'2000-01-01')))) as 后一月的月末是几号
--结果
天数
-----------
30(所影响的行数为 1 行)天数
-----------
30(所影响的行数为 1 行)月末是几号 前一月的月末是几号 后一月的月末是几号
----------- ----------- -----------
30 31 31(所影响的行数为 1 行)
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
b. 本周的星期一
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
c. 一年的第一天
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
d. 季度的第一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
e. 上个月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
f. 去年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
g. 本月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
h. 本月的第一个星期一
select DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,6-datepart(day,getdate()),getdate()) , 0)
i. 本年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
declare @year int ,@month int
set @year = 2006
set @month = 9
--1
select datediff(day,rtrim(@year)+'-'+rtrim(@month)+'-1',rtrim(@year+@month/12)+'-'+rtrim(case @month when 12 then 1 else @month+1 end)+'-1')
--2
select datepart(day,dateadd(day,-1,rtrim(@year+@month/12)+'-'+rtrim(case @month when 12 then 1 else @month+1 end)+'-1'))
--后面的参照上面