MS SQL_日期操作及只获取日期的方法

本文介绍了SQL中日期操作的常用技巧,包括DATEADD、DATEDIFF函数的使用方法,如何获取指定日期范围,以及datepart()函数的应用等。同时,还提供了如何仅获取日期或时间部分的具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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则正好可以读到时间部分。现在介绍最后面代的参数。

         分别以代的参数及实例效果说明(下表)

参数结果
10005 8 2006 9:27PM
10105/08/2006
1022006.05.08
10308/05/2006
10408.05.2006
10508-05-2006
10608 05 2006
10705 08, 2006
10821:30:51
10905 8 2006 9:31:11
11005-08-2006
1112006/05/08
11220060508
11308 05 2006 21:31:59
11421:33:06:503
1202006-05-08 21:33:38
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值