时间问题

wynlc 2012-12-03 01:41:13
获取当前时间上个月最后一天的时间
declare @LastTime nvarchar(50)
set @LastTime = replace(CONVERT(varchar(100),dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0)), 20),'-','/')
select @LastTime


问题:
1、获取当前时间下个月的第一天时间和最后一天时间

2、获取当前时间下下个月的第一天时间和最后一天时间

例:
由当前时间:2012/12/03 13:38:51获得如下时间
1、
2013/01/01 00:00:00
2013/01/31 23:59:59
2、
2013/02/01 00:00:00
2013/02/28 23:59:59
...全文
142 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
你的选择B 2012-12-04
  • 打赏
  • 举报
回复

select GETDATE()

--得到获取当前时间下个月的第一天时间和最后一天时间
Select DATEADD(MM, DATEDIFF(mm,0,DATEADD(mm,1,getdate())), 0)
Select DATEADD(SECOND,-1,DATEADD(MM, DATEDIFF(mm,0,DATEADD(mm,2,getdate())), 0))

--获取当前时间下下个月的第一天时间和最后一天时间
Select DATEADD(MM, DATEDIFF(mm,0,DATEADD(mm,2,getdate())), 0)
Select DATEADD(SECOND,-1,DATEADD(MM, DATEDIFF(mm,0,DATEADD(mm,3,getdate())), 0))


--结果
--当前时间
--2012-12-04 19:30:45.610

--得到获取当前时间下个月的第一天时间和最后一天时间
--2013-01-01 00:00:00.000
--2013-01-31 23:59:59.000

--获取当前时间下下个月的第一天时间和最后一天时间
--2013-02-01 00:00:00.000
--2013-02-28 23:59:59.000
helloworldysn 2012-12-04
  • 打赏
  • 举报
回复
[quote=引用 4 楼 wynlc 的回复:] 楼上几位太强大了 [quote] 学习了……
wynlc 2012-12-03
  • 打赏
  • 举报
回复
select replace(CONVERT(varchar(100), dateadd(month,1,getdate()), 20),'-','/')	--当前时间加一个月

select replace(CONVERT(varchar(100), dateadd(month,2,getdate()), 20),'-','/')	--当前时间加两个月
楼上几位太强大了 谢谢
-晴天 2012-12-03
  • 打赏
  • 举报
回复
declare @dt datetime set @dt=getdate() select convert(varchar(7),dateadd(m,1,@dt),120)+'-01',convert(varchar(10),dateadd(d,-1,convert(varchar(7),dateadd(m,2,@dt),120)+'-01'),120) select convert(varchar(7),dateadd(m,2,@dt),120)+'-01',convert(varchar(10),dateadd(d,-1,convert(varchar(7),dateadd(m,3,@dt),120)+'-01'),120) /* ---------- ---------- 2013-01-01 2013-01-31 (1 行受影响) ---------- ---------- 2013-02-01 2013-02-28 (1 行受影响) */
  • 打赏
  • 举报
回复

--下个月第一天
select dateadd(mm,1,DATEADD(dd,-day(getdate())+1,getdate()))
--下个月最后一天
select dateadd(dd,-1,dateadd(mm,2,DATEADD(dd,-day(getdate())+1,getdate())))
--下下个月第一天
select dateadd(mm,2,DATEADD(dd,-day(getdate())+1,getdate()))
--下下个月最后一天
select dateadd(dd,-1,dateadd(mm,3,DATEADD(dd,-day(getdate())+1,getdate())))

/*

-----------------------
2013-01-01 14:02:17.420

(1 行受影响)


-----------------------
2013-01-31 14:02:17.420

(1 行受影响)


-----------------------
2013-02-01 14:02:17.420

(1 行受影响)


-----------------------
2013-02-28 14:02:17.420

(1 行受影响)


*/


發糞塗牆 2012-12-03
  • 打赏
  • 举报
回复
详见:http://blog.csdn.net/dba_huangzj/article/details/7657979

--定义给定的一天
DECLARE @Date DATETIME = GETDATE();
 
SELECT @Date AS '目前时间'
,DATEADD(DD,-1,@Date) AS '前一天'
,DATEADD(DD,1,@Date) AS '后一天'
/*月计算*/
,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0) AS '月初'--在SQL Server中0 代表1900-01-01,通过月运算,保证日恒久为1号
,DATEADD(DD,-1,DATEADD(MONTH,1+DATEDIFF(MONTH,0,@Date),0)) AS '月末(精确到天)'--找到下月初再扣减1天,建议使用DATEADD而不要直接“-1”
,DATEADD(SS,-1,DATEADD(MONTH,1+DATEDIFF(MONTH,0,@Date),0)) AS '月末(精确到datetime的小数位)'
,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)-1,0) AS '上月第一天'
,DATEADD(DAY,-1,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)) AS '上月最后一天'
,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)+1,0) AS '下月第一天'
,DATEADD(DAY,-1,DATEADD(MONTH,2,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)))  AS '下月最后一天'
/*周计算*/
,DATEADD(WEEKDAY,1-DATEPART(WEEKDAY,@Date),@Date) AS '本周第一天(周日)'--注意此处与@@datefirst的值有关
,DATEADD(WEEK,DATEDIFF(WEEK,-1,@Date),-1) AS '所在星期的星期日'--注意此处与@@datefirst的值有关
,DATEADD(DAY,2-DATEPART(WEEKDAY,@Date),@Date) AS '所在星期的第二天'--注意此处与@@datefirst的值有关,其他天数类推
,DATEADD(WEEK,-1,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS '上个星期第一天(周日)'--注意此处与@@datefirst的值有关
,DATEADD(WEEK,1,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS '下个星期第一天(星期日)'--注意此处与@@datefirst的值有关
,DATENAME(WEEKDAY,@Date) AS '本日是周几'
,DATEPART(WEEKDAY,@Date) AS '本日是周几'--返回值 1-星期日,2-星期一,3-星期二......7-星期六
/*年度计算*/
,DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),0) AS '年初'
,DATEADD(YEAR,DATEDIFF(YEAR,-1,@Date),-1) AS '年末'
,DATEADD(YEAR,DATEDIFF(YEAR,-0,@Date)-1,0) AS '去年年初'
,DATEADD(YEAR,DATEDIFF(YEAR,-0,@Date),-1) AS '去年年末'
,DATEADD(YEAR,1+DATEDIFF(YEAR,0,@Date),0) AS '明年年初'
,DATEADD(YEAR,1+DATEDIFF(YEAR,-1,@Date),-1) AS '明年年末'
/*季度计算*/
,DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),0) AS '本季季初'
,DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@Date),-1) AS '本季季末'
,DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date)-1,0) AS '上季季初'
,DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),-1) AS '上季季末'
,DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@Date),0) AS '下季季初'
,DATEADD(QUARTER,2+DATEDIFF(QUARTER,0,@Date),-1) AS '下季季末'
课程内容:本课程是《Java工程师必学系列课程》的第6部分,主要讲解Java语言中中新旧两代日期时间相关的类、日期时间相关的处理方法、历法和时间计算的常识,在课程的最后还安排了万年历实战项目本课程涉及的主要内容可以分为四部分:一、Java语言旧日期时间系统二、Java8新日期时间系统三、日期、时间、历法基础知识四、万年历项目课程说明:在开发Java程序的过程中,无论做什么类型的项目,基本上都会处理与日期和时间相关的问题。既然日期时间问题的处理已经成了程序必须要掌握的技能,那我们就必须认真深入的学习日期时间的计算和处理方法。本课程将深入讲解Java语言新旧两代日期时间系统的相关知识。在讲解的过程中,不仅仅讲解如何调用各种类所提供的方法去处理相关问题,更是从原理上深入分析了这些类的设计原理,以及要如何避免在实战中踩到那些非常隐蔽的大坑。此外,除了讲解日期时间相关工具类的使用,本课程还向广大学员普及了一些必要的日期、时间和历法的相关知识。让学员能够从根本上理解日期时间算法的设计思路。同时,本课程在最后一部分,安排了非常精彩的、完整的万年历项目,通过实战的形式切实帮助学员提高解决具体问题的能力!预期效果:认真学习完本课程,学员可以掌握日期时间计算和处理的相关知识,并能提高实际的编码水平。配套福利:万年历软件的完整源码环境配置要求:学习本课程需安装JDK13或更高版本的JDK,以便程序能正确运行,建议使用IntelliJ IDEA 2019.1.2或更高版本的开发工具。因有合作协议约束,《穆哥学堂》只提供PDF版本的课件!

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧