您的位置:首页 > 数据库

SQL 月初月末 排除临界 无BUG 日期大全 日期差

2016-11-08 14:58 381 查看
select   dateadd(dd,-day(dateadd(month,-1,getdate()))+1,dateadd(month,-1,getdate()))     /*上个月一号*/

select   dateadd(dd,-day(getdate()),getdate())                                                                      /* 上月月底 */

select   dateadd(dd,-day(getdate())+1,getdate())                                                                  /* 本月一号 */   

select   dateadd(dd,-day(dateadd(month,1,getdate())),dateadd(month,1,getdate()))            /* 本月底 */

select   dateadd(dd,-day(dateadd(month,1,getdate()))+1,dateadd(month,1,getdate()))        /* 下月一号 */

select   dateadd(dd,-day(dateadd(month,2,getdate())),dateadd(month,2,getdate()))            /* 下月月底 */

如果不显示时间则  convert(nvarchar(10),时间,120)

--------------------------------------------------------------------------------

DECLARE @a DATETIME

SET @a='2009-07-8 13:24:09.437'

select @a as '当前日期',

DateName(year,@a) as '年',

DateName(month,@a) as '月',

DateName(day,@a) as '日',

DateName(dw,@a) as '星期',

DateName(week,@a) as '周数',

DateName(hour,@a) as '时',

DateName(minute,@a) as '分',

DateName(second,@a) as '秒'

 

 

--------------------------------------------------------------------------------

递归法查询一年的所有天数

1.

WITH Dates AS 

 ( SELECT [Date] = CONVERT(DATETIME,'01/01/2011') 

UNION ALL

 SELECT [Date] = DATEADD(DAY, 1, [Date]) FROM Dates WHERE Date  < '12/31/2011' )

  SELECT [Date],DATENAME(YEAR,date)AS 年,DATENAME(month,date)AS 月,DATENAME(day,date)AS 日,DATENAME(dw,date)AS 星期,DATENAME(week,date)AS 周数 FROM Dates OPTION (MAXRECURSION 366)

2.

WITH CTEDates AS ( SELECT CAST('20070101' AS DATETIME) AS DateVal UNION ALL SELECT DATEADD(dd, 1, DateVal) FROM CTEDates WHERE DateVal < '20071231' ) SELECT DateVal, 0,0,0,0,0,0,0,0,0 FROM CTEDates OPTION  (MAXRECURSION 366)

 

-------------------------------------------------------------------------------------

//按自然周统计 

select to_char(date,'iw'),sum() 

from 

where 

group by to_char(date,'iw')

//按自然月统计 

select to_char(date,'mm'),sum() 

from 

where 

group by to_char(date,'mm')

//按季统计 

select to_char(date,'q'),sum() 

from 

where 

group by to_char(date,'q')

//按年统计 

select to_char(date,'yyyy'),sum() 

from 

where 

group by to_char(date,'yyyy') 

------------------------------------------------------------------------

DateDiff 函数

返回 Variant (Long) 的值,表示两个指定日期间的时间间隔数目。

语法

DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])

DateDiff 函数语法中有下列命名参数:

部分 描述 

interval 必要。字符串表达式,表示用来计算date1 和 date2 的时间差的时间间隔 

Date1□date2 必要;Variant (Date)。计算中要用到的两个日期。 

Firstdayofweek 可选。指定一个星期的第一天的常数。如果未予指定,则以星期日为第一天。 

firstweekofyear 可选。指定一年的第一周的常数。如果未予指定,则以包含 1 月 1 日的星期为第一周。

设置

interval 参数的设定值如下:

设置 描述 

yyyy 年 

q 季 

m 月 

y 一年的日数 

d 日 

w 一周的日数 

ww 周 

h 时 

n 分钟 

s 秒

firstdayofweek 参数的设定值如下:

常数 值 描述 

vbUseSystem 0 使用 NLS API 设置。 

vbSunday 1 星期日(
4000
缺省值) 

vbMonday 2 星期一 

vbTuesday 3 星期二 

vbWednesday 4 星期三 

vbThursday 5 星期四 

vbFriday 6 星期五 

vbSaturday 7 星期六

常数 值 描述 

vbUseSystem 0 用 NLS API 设置。 

vbFirstJan1 1 从包含 1 月 1 日的星期开始(缺省值)。 

vbFirstFourDays 2 从第一个其大半个星期在新的一年的一周开始。 

vbFirstFullWeek 3 从第一个无跨年度的星期开始。

 

----------------------------------------------------------------------------------

 

本周的星期一 :SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)   

一年的第一天 :SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) 

季度的第一天 :SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)   

本月最后一天:select   dateadd(dd,-day(getdate()),dateadd(m,1,getdate()))

上个月一号:select   dateadd(dd,-day(dateadd(month,-1,getdate()))+1,dateadd(month,-1,getdate()))   

上月月底:select   dateadd(dd,-day(getdate()),getdate())                                                           本月一号select   dateadd(dd,-day(getdate())+1,getdate())                                                           

本月底:select   dateadd(dd,-day(dateadd(month,1,getdate())),dateadd(month,1,getdate()))

下月一号:select   dateadd(dd,-day(dateadd(month,1,getdate()))+1,dateadd(month,1,getdate()))

下月月底:select   dateadd(dd,-day(dateadd(month,2,getdate())),dateadd(month,2,getdate()))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: