Asp.Net教程,WinForm教程,Asp.Net MVC,vs2008教程,vs2010教程,Silverlight技术,源码下载,Asp.Net视频教程
全站热门标签
vs2010 Silverlight 存储过程 水晶报表 LINQ ADO.NET JavaScript DataGridView GridView AjaxPro DevExpress 面向对象 Extjs XML HTML教程 Oracle jQuery WPF MVC 分页 Office2010 GDI+ Visual C++2010 Dojo MySQL VB.NET WCF4.0 ASPxGridView WinForm textbox Sql2005 cookie Discuz!NT checkbox WCF SQL经典语句 T-SQL F# asp.net VS2008 SQL Ajax DropDownList VS2008新特性 TreeView Access Flex 页面执行时间 字符串 DataSet VB2005 回调 动画 C#时间 游戏 ASP.NET MVC
SQL Server Oracle Access MySQL
当前位置: 主页 > 数据库 > SQL Server >

SQL Server中的时间算法总结(2)

时间:2010-07-28 11:29来源:未知 作者:admin 点击:

--计算给定日期所在月的天数
DECLARE @Date DATETIME;
SET @Date = GETDATE()
--本月度第一天与下月度第一天所差的天数
SELECT DATEDIFF(DAY,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0),DATEADD(MONTH,1+DATEDIFF(MONTH,0,@Date),0))
--借助变量简化
SELECT @Date = DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0) --本月度第一天
SELECT DATEDIFF(DAY,@Date,DATEADD(MONTH,1,@Date))
--另一种思路:给定月最后一天的日期,记为本月天数
SELECT DAY(DATEADD(MONTH,DATEDIFF(MONTH,-1,@Date),-1))
GO

--计算给定日期所在季度的天数
DECLARE @Date DATETIME;
SET @Date = GETDATE()
--本季度第一天与下季度第一天所差的天数
SELECT DATEDIFF(DAY,DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),0),DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@Date),0))
--借助变量简化
SELECT @Date = DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),0) --本季度第一天
SELECT DATEDIFF(DAY,@Date,DATEADD(QUARTER,1,@Date))
GO

--计算给定日期所在年度的天数
DECLARE @Date DATETIME;
SET @Date = GETDATE()
--本年度第一天与下年度第一天所差的天数
SELECT DATEDIFF(DAY,DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),0),DATEADD(YEAR,1+DATEDIFF(YEAR,0,@Date),0))
--借助变量简化
SELECT @Date = DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),0) --本年度第一天
SELECT DATEDIFF(DAY,@Date,DATEADD(YEAR,1,@Date))
GO

--判断给定日期所在年是否闰年
--
根据全年总天数判断
DECLARE @Date DATETIME;
SET @Date = GETDATE()
SELECT CASE DATEDIFF(DAY,DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),0),DATEADD(YEAR,1+DATEDIFF(YEAR,0,@Date),0))
 
WHEN 365 THEN '平年' ELSE '闰年' END
--根据二月天数判断
--
给日期的上一年最后一天加2个月,即为当年2月最后一天
SELECT CASE DAY(DATEADD(MONTH,2,DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),-1))) WHEN 28 THEN '平年' ELSE '闰年' END
GO

--计算给定日期是当年的第几天
DECLARE @Date DATETIME;
SET @Date = GETDATE()
SELECT DATEPART(DAYOFYEAR,@Date) [DayOfYear];
SELECT DATENAME(DAYOFYEAR,@Date[DayOfYear];
--另一种思路:当前日期与上年最后一天差的天数
SELECT DATEDIFF(DAY,DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),-1),@Date)[DayOfYear]
GO

--计算给定日期是当年的第几周
DECLARE @Date DATETIME;
SET @Date = GETDATE()
SELECT DATEPART(WEEK,@Date) [WeekOfYear]; --返回int型
SELECT DATENAME(WEEK,@Date) [WeekOfYear]; --返回varchar型
GO

--计算给定日期是当年的第几月
DECLARE @Date DATETIME;
SET @Date = GETDATE()
SELECT DATEPART(MONTH,@Date) [MonthOfYear]; --返回int型
SELECT DATENAME(MONTH,@Date) [MonthOfYear]; --返回varchar型
SELECT MONTH(@Date) [MonthOfYear];--返回int型
GO

--计算给定日期是当年的第几季度
DECLARE @Date DATETIME;
SET @Date = GETDATE()
SELECT DATEPART(QUARTER,@Date) [QuarterOfYear]; --返回int型
SELECT DATENAME(QUARTER,@Date) [QuarterOfYear]; --返回varchar型
GO

--计算给定日期是当月的第几周
DECLARE @Date DATETIME;
SET @Date = GETDATE()
--思路,给定日期是当年的第几周-给定日期所在月第一天是当年的第几周
SELECT DATEPART(WEEK,@Date)-DATEPART(WEEK,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0))+1 [WeekOfMonth]
SELECT DATEPART(WEEK,@Date)-DATEPART(WEEK,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date))+1 [WeekOfMonth]
GO

--计算给定日期所在月的第一个星期一是哪天
DECLARE @Date DATETIME;
SET @Date = GETDATE()
--思路,1900-01-01(星期一)加上(给定日志所在月的月6号与1900-01-01差的周数)个周
--
为什么不选7号?如果是7号,那么7好恰好是星期日的话,第一个周一就会算到8号。
--
为什么不选5号?如果5号是星期六,那么周一就跑到上月了。小于5号与这个道理一样。
SELECT DATEADD(WEEK,DATEDIFF(WEEK,0,DATEADD(DAY,6-DATEPART(DAY,@Date),@Date)),0) '所在月的第一个星期一'
SELECT DATEADD(WEEK,DATEDIFF(WEEK,0,DATEADD(DAY,6-DATEPART(DAY,@Date),@Date)),7) '所在月的第二个星期一'
SELECT DATEADD(WEEK,DATEDIFF(WEEK,0,DATEADD(DAY,6-DATEPART(DAY,@Date),@Date)),1) '所在月的第一个星期二'
SELECT DATEADD(WEEK,DATEDIFF(WEEK,0,DATEADD(DAY,6-DATEPART(DAY,@Date),@Date)),8) '所在月的第二个星期二'
GO

Tags:算法 SQL
责任编辑:admin
返回顶部
------分隔线----------------------------
推荐内容
骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价 骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价