SQL 月初月末 排除临界 无BUG 日期大全 日期差
2011-11-11 16:06
281 查看
摘自:/article/10742640.html
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 星期日(缺省值)
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()))
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 星期日(缺省值)
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()))
相关文章推荐
- SQL 月初月末 排除临界 无BUG 日期大全 日期差
- SQL 月初月末 排除临界 无BUG 日期大全 日期差
- SQL 月初月末 排除临界 无BUG 日期大全 日期差
- sql取月初月底、季年周等日期范围sql(许多网上博客有BUG)
- 在oracle sql 中处理日期大全
- SQL日期格式化应用大全
- SQL日期格式化应用大全
- JavaScript日期集合(今日,昨日,本周一,周末 ,月初,月末)
- sql日期格式大全
- MS SQL Server中的CONVERT日期格式化大全
- 获取指定日期的常用前后节点(月初月末周一周末等等)
- Sql 日期格式化函数大全
- JavaScript日期集合(今日,昨日,本周一,周末 ,月初,月末)
- C#获取周一、周日的日期,月初,月末,季度第一天,季度最后一天
- SQL server中convert函数大全(SQL日期时间转为字符串)
- SQL 月末 月初 写法
- MS SQL Server中的 CONVERT 日期时间 格式化大全
- SQL日期格式化应用大全
- 此类用于取得当前日期相对应的月初,月末,季初,季末,年初,年末,返回值均为String字符串
- Vfp获得:月天数.月初日期.月末日期及两个日期之间天数.月数.年数