DATEADD&DATEDIFF的使用:
---上一周
select DATEADD(wk,DATEDIFF(wk,0,getdate())-1,0)
select DATEADD(wk,DATEDIFF(wk,0,getdate())-1,6)
---本周
select DATEADD(wk,DATEDIFF(wk,0,getdate()),0)
select DATEADD(wk,DATEDIFF(wk,0,getdate()),6)
---下一周
select DATEADD(wk,DATEDIFF(wk,0,getdate())+1,0)
select DATEADD(wk,DATEDIFF(wk,0,getdate())+1,6)
---上一月第一天
select DATEADD(mm,DATEDIFF(mm,0,getdate())-1,0)
---本月第一天
select DATEADD(mm,DATEDIFF(mm,0,getdate()),0)
---下一月第一天
select DATEADD(mm,DATEDIFF(mm,0,getdate())+1,0)
---本月方法一
DECLARE @NOW DATETIME
DECLARE @FistDayOfCurrentMonth DATETIME
DECLARE @LastDayOfCurrentMonth DATETIME
SET @NOW = GETDATE()
SET @FistDayOfCurrentMonth = @NOW - DAY(@NOW) + 1
SET @LastDayOfCurrentMonth = DATEADD(MONTH, 1, @NOW - DAY(@NOW) + 1) - 1
SELECT @FistDayOfCurrentMonth
SELECT @LastDayOfCurrentMonth
---本月方法二---
DECLARE @FistDayOfCurrentMonth DATETIME
DECLARE @LastDayOfCurrentMonth DATETIME
SET @FistDayOfCurrentMonth = DATEADD(mm,DATEDIFF(mm,0,getdate()),0)
SET @LastDayOfCurrentMonth = DATEADD(MONTH, 1, @FistDayOfCurrentMonth) - 1
SELECT @FistDayOfCurrentMonth
SELECT @LastDayOfCurrentMonth
---上月---
DECLARE @FistDayOfLastMonth DATETIME
DECLARE @LastDayOfLastMonth DATETIME
SET @FistDayOfLastMonth = DATEADD(mm,DATEDIFF(mm,0,getdate())-1,0)
SET @LastDayOfLastMonth = DATEADD(MONTH, 1, @FistDayOfLastMonth) - 1
SELECT @FistDayOfLastMonth
SELECT @LastDayOfLastMonth
datepart()函数的使用
* datepart()函数可以方便的取到时期中的各个部分
* 以下简单的语句可以演示所取到的结果
---如日期:2011-07--02 18:15:36.513---
select getdate()
---yy:取年 2011---
select datepart(yy,getDate())
--- mm:取月 8---
select datepart(mm,getdate())
---dd:取月中的天 2
select datepart(dd,getdate())
--- dy:取年中的天 183
select datepart(dy,getdate())
---wk:取年中的周 27
select datepart(wk,getdate())
--- dw:取周中的天 1---
select datepart(dw,getdate())
---qq:取年中的季度 3
select datepart(qq,getdate())
--- hh:取小时 18
select datepart(hh,getdate())
---mi:取分钟 15
select datepart(mi,getdate())
---ss:取秒 36
select datepart(ss,getdate())
---计算从今天到12/25/2006还有多少天
select datediff(dd,getdate(),'12/25/2006')
--计算从今天到12/25/2006还有多少个月
select datediff(mm,getdate(),'12/25/2006')
---以字符串而不是数字的形式得到今天的月份(07)
select datename(mm,getdate())
- --在目前的日期日期上加30天
select dateadd(dd,30,getdate())
---在目前的日期日期上加3个月
select dateadd(mm,3,getdate())
---在目前的日期日期上加1年
select dateadd(yy,1,getdate())
---得到本季度第一天
select DATEADD(qq,DATEDIFF(qq,0,getdate()), 0)
---得到上主、季度第一天
select dateadd(mm,-3,DATEADD(qq, DATEDIFF(qq,0,getdate()), 0))
用SQL只获取日期的方法用getdate()方法可以获取当现的日期加上时间。
但是如果我们只需要得到当前的日期,不需要时间部分,或者不需要日期只要时间部分,再或者我要只要字段中的日期以某种形式显示,应该怎么操作呢?
可以使用 convert(varchar(10),getdate(),120)这样的方法来实现,其中varchar(10)定义的是你要的字段的长度,当然长度的不同返回的也会不的,如果我们只要日期部分,设
10正好为日期长度,如果设成19则正好可以读到时间部分。现在介绍最后面代的参数。
分别以代的参数及实例效果说明(下表)
参数 | 结果 |
100 | 05 8 2006 9:27PM |
101 | 05/08/2006 |
102 | 2006.05.08 |
103 | 08/05/2006 |
104 | 08.05.2006 |
105 | 08-05-2006 |
106 | 08 05 2006 |
107 | 05 08, 2006 |
108 | 21:30:51 |
109 | 05 8 2006 9:31:11 |
110 | 05-08-2006 |
111 | 2006/05/08 |
112 | 20060508 |
113 | 08 05 2006 21:31:59 |
114 | 21:33:06:503 |
120 | 2006-05-08 21:33:38 |