SQL Server 中的时间算法总结
发布时间:2010年07月31日点击数:
次佚名
- DECLARE @Date DATETIME
- SET @Date=GETDATE()
-
- SELECT DATEADD(DAY,-1,@Date) AS '前一天'
-
- SELECT DATEADD(DAY,1,@Date) AS '后一天'
- GO
-
-
-
-
- DECLARE @Date DATETIME
- SET @Date=GETDATE()
- SELECT DATEADD(MONTH,DATEDIFF(MONTH,'1900-01-01',@Date),'1900-01-01') AS '所在月的第一天'
-
- SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0) AS '所在月的第一天'
-
-
-
- SELECT DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)
- GO
-
-
- DECLARE @Date DATETIME
- SET @Date=GETDATE()
-
- SELECT DATEADD(DAY,-1,DATEADD(MONTH,1+DATEDIFF(MONTH,'1900-01-01',@Date),'1900-01-01')) AS '所在月的最一天'
- SELECT DATEADD(MONTH,1+DATEDIFF(MONTH,'1900-01-01',@Date),'1900-01-01')-1 AS '所在月的最一天'
-
- SELECT DATEADD(DAY,-1,DATEADD(MONTH,1+DATEDIFF(MONTH,0,@Date),0)) AS '所在月的最一天'
- SELECT DATEADD(MONTH,1+DATEDIFF(MONTH,0,@Date),0)-1 AS '所在月的最一天'
-
- SELECT DATEADD(MONTH,DATEDIFF(MONTH,'1989-12-31',@Date),'1989-12-31') AS '所在月的最一天'
-
- SELECT DATEADD(MONTH,DATEDIFF(MONTH,-1,@Date),-1) AS '所在月的最一天'
-
- SELECT DATEADD(DAY,-1,DATEADD(MONTH,1,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)))
- GO
-
-
-
-
- DECLARE @Date DATETIME
- SET @Date=GETDATE()
-
- SELECT DATEADD(MONTH,-1,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0)) AS '上月第一天'
-
- SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)-1,0) AS '上月第一天'
-
- SELECT DATEADD(MONTH,-1,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)) '上月第一天'
- GO
-
-
- DECLARE @Date DATETIME
- SET @Date=GETDATE()
-
- SELECT DATEADD(DAY,-1,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0)) AS '上月最后一天'
-
- SELECT DATEADD(DAY,-1,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)) '上月最后一天'
- SELECT DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)-1 '上月最后一天'
-
-
-
-
-
-
- SELECT DATEADD(MONTH,DATEDIFF(MONTH,-1,@Date)-1,-1)
-
- SELECT DATEADD(DAY,-1,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)) '上月最后一天'
-
- SELECT DATEADD(DAY,0-DATEPART(DAY,@Date),@Date) '上月最后一天'
- GO
-
-
- DECLARE @Date DATETIME
- SET @Date=GETDATE()
-
- SELECT DATEADD(MONTH,1,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0)) AS '下月第一天'
-
- SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)+1,0) AS '下月第一天'
-
- SELECT DATEADD(MONTH,1,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)) '下月第一天'
- GO
-
-
- DECLARE @Date DATETIME
- SET @Date=GETDATE()
-
- SELECT DATEADD(DAY,-1,DATEADD(MONTH,2,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0))) AS '下月最后一天'
-
- SELECT DATEADD(DAY,-1,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)+2,0)) AS '下月最后一天'
- SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)+2,0)-1 AS '下月最后一天'
-
- SELECT DATEADD(MONTH,DATEDIFF(MONTH,-1,@Date)+1,-1) '下月最后一天'
-
- SELECT DATEADD(DAY,-1,DATEADD(MONTH,2,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date))) '下月最后一天'
- GO
-
-
- DECLARE @Date DATETIME
- SET @Date= GETDATE()
-
-
-
- SET DATEFIRST 7
- SELECT DATEADD(WEEKDAY,1-DATEPART(WEEKDAY,@Date),@Date) AS '所在星期的第一天,星期日'
-
-
- SELECT DATEADD(WEEK,DATEDIFF(WEEK,-1,@Date),-1) AS '所在星期的星期日'
-
- SELECT DATEADD(WEEK,DATEDIFF(WEEK,6,@Date),6) AS '所在星期的星期日'
- GO
-
-
-
- DECLARE @Date DATETIME
- SET @Date= GETDATE()
-
-
- SET DATEFIRST 7
- SELECT DATEADD(DAY,2-DATEPART(WEEKDAY,@Date),@Date) AS '所在星期的第二天,星期一'
-
-
- SELECT DATEADD(WEEK,DATEDIFF(WEEK,0,@Date),0) AS '所在星期的星期一'
- GO
-
-
- DECLARE @Date DATETIME
- SET @Date= GETDATE()
-
-
- SET DATEFIRST 7
- SELECT DATEADD(WEEK,-1,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS '上个星期第一天,星期日'
-
- SELECT DATEADD(DAY,-7,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS '上个星期第一天,星期日'
-
- SELECT DATEADD(DAY,-6-DATEPART(WEEKDAY,@Date),@Date) AS '上个星期第一天,星期日'
-
- SELECT DATEADD(WEEK,-1+DATEDIFF(WEEK,-1,@Date),-1) AS '上个星期日'
-
- SELECT DATEADD(WEEK,DATEDIFF(WEEK,6,@Date),-1) AS '上个星期日'
- GO
-
-
-
- DECLARE @Date DATETIME
- SET @Date= GETDATE()
-
-
- SET DATEFIRST 7
- SELECT DATEADD(WEEK,1,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS '下个星期第一天,星期日'
-
- SELECT DATEADD(DAY,7,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS '下个星期第一天,星期日'
-
- SELECT DATEADD(DAY,8-DATEPART(WEEKDAY,@Date),@Date) AS '下个星期第一天,星期日'
-
- SELECT DATEADD(WEEK,1+DATEDIFF(WEEK,-1,@Date),-1) AS '下个星期日'
-
- SELECT DATEADD(WEEK,DATEDIFF(WEEK,-1,@Date),6) AS '下个星期日'
- GO
-
-
- DECLARE @Date DATETIME
- SET @Date= GETDATE()
-
- SET DATEFIRST 7
- SELECT DATEPART(WEEKDAY,@Date)
-
-
- SELECT DATENAME(WEEKDAY,@Date) '星期'
- GO
-
-
-
- DECLARE @Date DATETIME
- SET @Date=GETDATE()
-
- SELECT DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),0) AS '所在年的第一天'
-
- SELECT DATEADD(YEAR,DATEDIFF(YEAR,-1,@Date),-1) AS '所在年的最后一天'
-
- SELECT DATEADD(YEAR,DATEDIFF(YEAR,-0,@Date)-1,0) AS '所在年的上一年的第一天'
-
- SELECT DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),-1) AS '所在年的上一年的最后一天'
-
- SELECT DATEADD(YEAR,1+DATEDIFF(YEAR,0,@Date),0) AS '所在年的下一年的第一天'
-
- SELECT DATEADD(YEAR,1+DATEDIFF(YEAR,-1,@Date),-1) AS '所在年的下一年的最后一天'
- GO
-
-
- DECLARE @Date DATETIME
- SET @Date=GETDATE()
-
- SELECT DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),0) AS '当前季度的第一天'
-
- SELECT DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@Date),-1) AS '当前季度的最后一天'
-
- SELECT DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date)-1,0) AS '当前季度的上个季度初'
-
- SELECT DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),-1) AS '当前季度的上个季度末'
-
- SELECT DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@Date),0) AS '当前季度的下个季度初'
-
- SELECT DATEADD(QUARTER,2+DATEDIFF(QUARTER,0,@Date),-1) AS '当前季度的下个季度末'
- GO
-
-
- 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
-
-
- 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];
- SELECT DATENAME(WEEK,@Date) [WeekOfYear];
- GO
-
-
- DECLARE @Date DATETIME;
- SET @Date = GETDATE()
- SELECT DATEPART(MONTH,@Date) [MonthOfYear];
- SELECT DATENAME(MONTH,@Date) [MonthOfYear];
- SELECT MONTH(@Date) [MonthOfYear];
- GO
-
-
- DECLARE @Date DATETIME;
- SET @Date = GETDATE()
- SELECT DATEPART(QUARTER,@Date) [QuarterOfYear];
- SELECT DATENAME(QUARTER,@Date) [QuarterOfYear];
- 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()
-
-
-
- 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