您的位置:首页 > 数据库

《原创》SQL2005 日期函数大全

2010-06-03 00:26 330 查看
/*
工作中总不记得sql对时间日期的操作。总在有的时候在网去寻找很耗时。 因此自己就对一些实用的东东整理了下。 拿出来和大家晒晒。。。

*/

-- 当前系统日期、时间
select getdate()
-- 当前日期
select 当前日期=convert(varchar(10),getdate(),120)
-- 当前时间
select 当前时间=convert(varchar(8),getdate(),114)

/*

常用到的缩写

*/

日期部分 缩写
year

yy, yyyy

quarter

qq, q

month

mm, m

dayofyear

dy, y

day

dd, d

week

wk, ww

Hour

hh

minute

mi, n

second

ss, s

millisecond

ms

/*
DATENAME ( datepart ,date )

返回表示指定日期的指定日期部分的字符串。
参数:datepart - 是指定要返回的日期部分的参数
date - 表达式,用于返回 datetime 或 smalldatetime 值,或日期格式的字符串。
返回类型 nvarchar

*/
--实例
--当年第几周
SELECT 本年第多少周=datename(week,getdate())
SELECT 本年第多少周=datename(week,'20100101')
SELECT 今天是周几=datename(weekday,getdate())
--月份
SELECT datename(mm,getdate())
SELECT month(getdate())
SELECT datepart(mm,getdate())
--年份
SELECT datename(yy,getdate())
SELECT year(getdate())
SELECT datepart(yy,getdate())
--季度
SELECT datename(qq,getdate())
SELECT datepart(qq,getdate())
--天
SELECT datename(dd,getdate())
SELECT day(getdate())
SELECT datepart(dd,getdate())

/*
DATEDIFF ( datepart , startdate , enddate )
返回跨两个指定日期的日期边界数和时间边界数。
参数:datepart - 指定应在日期的哪一部分计算差额的参数
startdate - 计算的开始日期
enddate - 计算的结束日期
返回类型 integer
*/
--用途

--1、2010年年度订单
select * from Orders where DATEDIFF(yyyy,'2010',OrderData)=0
--2、2010年一季度订单
select * from Orders where DATEDIFF(mm,'20100101',OrderData)<3 --是相差多少 1月与4月相差3个月

/*
DATEADD (datepart , number, date )
返回给指定日期加上一个时间间隔后的新 datetime 值。
参数:datepart - 指定要返回新值的日期的组成部分
number - 用于与 datepart 相加的值 如果指定了非整数值,则将舍弃该值的小数部分。
date - 表达式,用于返回 datetime 或 smalldatetime 值,或日期格式的字符串
*/

--用途
-- 一年的第一天 现在用年(yy)的时间间隔来显示这一年的第一天。
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
-- 该季度的第一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
--当前日期所在月的第一天
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
--解释 :0 表示 日期时间1900-01-01 00:00:00.000 从 select convert(datetime,0)可获知
--先获取当前日期与1900年01月01号相差的月数A
SELECT DATEDIFF(mm,0,getdate())
--在 从1900年01月01相加 月数A 则可以获取 相加月数后的第一天的日期
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
--2、当前日期所在月的最后时刻
--通过从这个例子上减去3毫秒来获得。有一点要记住,在Sql Server中时间是精确到3毫秒。这就是为什么我需要减去3毫秒来获得我要的日期和时间。
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate())+1, 0))
--
--3、上个月的最后最后时刻
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
--原理同上 。
--4、本周星期一
SELECT dateadd(wk,datediff(wk,0,getdate()),0)
--5、本周星期二
SELECT dateadd(dd,1, dateadd(wk,datediff(wk,0,getdate()),0))
--去年的最后一天 为了要得到去年的最后一天,你需要在今年的第一天上减去3毫秒。
SELECT dateadd(ms,-2,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
--本年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
--本月的第一个星期一
SELECT DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: