日期函数
函数名称 | 参数 | 示例 | 说明 |
dateadd | (日期部分,数字,日期) | select dateadd(year,45,'1990-12-11') 返回 2035-12-11 00:00:00.000 select dateadd(month,45,'1990-12-11') 返回1994-09-11 00:00:00.000 select dateadd(mm,45,'1990-12-11') 返回1994-09-11 00:00:00.000 select dateadd(qq,12,'1990-12-11') 返回1993-12-11 00:00:00.000 select dateadd(hh,12,'1990-12-11') 返回1990-12-11 12:00:00.000 select dateadd(yy,-12,'1990-12-11') 返回1978-12-11 00:00:00.000 | 返回给指定日期加上一个时间间隔后的新的日期值。 数字:用于与指定的日期部分相加的值。如果指定了非整数值,则将舍弃该值的小数部分,舍弃时不遵循四舍五入。 日期:指定的原日期 在此函数中 dw,dy,dd效果一样都表示天 |
datediff | (日期部分,开始日期,结束日期) | select datediff(yy,'1990-12-11','2008-9-10') 返回 18 select datediff(mm,'2007-12-11','2008-9-10') 返回 9 | 返回两个指定日期的指定日期部分的差的整数值。 在计算时由结束日期减去开始日期 在此函数中 dw,dy,dd效果一样都表示天 |
datename | (日期部分,日期) | select datename(mm,'2007-12-11')返回12 select datename(dw,'2007-12-11')返回星期二 select datename(dd, '2007-12-11')返回11 | 返回表示指定日期的指定日期部分的字符串。 dw表示一星期中星期几,wk表示一年中的第几个星期 dy表示一年中的第几天 |
datepart | (日期部分,日期) | select datepart(mm,'2007-12-11')返回12 select datepart(dw,'2007-12-11')返回3 select datepart(dd, '2007-12-11')返回11 | 返回表示指定日期的指定日期部分的整数。 wk表示一年中的第几个星期 dy表示一年中的第几天, dw表示一星期中星期几,返回整数默认1为星期天 |
getdate | 无参数 | select getdate() 返回2009-04-28 18:57:24.153 | 返回当前系统日期和时间。 |
day | (日期) | select day('2007-12-11')返回11 | 返回一个整数,表示指定日期的天的部分。 等价于datepart(dd, 日期) |
month | (日期) | select month('2007-12-11')返回12 | 返回一个整数,表示指定日期的月的部分。 等价于datepart(mm, 日期) |
year | (日期) | select year('2007-12-11')返回2007 | 返回一个整数,表示指定日期的年的部分。 等价于datepart(yy, 日期) |
getutcdate | 无参数 | select getutcdate() 返回2009-04-28 10:57:24.153 | 返回表示当前的 UTC(世界标准时间)时间。即格林尼治时间(GMT) |
日期部分(指定要返回新值的日期的组成部分。下表列出了 Microsoft SQL Server 2005 可识别的日期部分及其缩写。)
日期部分 | 含义 | 缩写 |
year | 年 | yy, yyyy |
quarter | 季 | qq, q |
month | 月 | mm, m |
dayofyear | 天(请看函数中的说明) | dy, y |
day | 天(请看函数中的说明) | dd, d |
week | 星期 | wk, ww |
weekday | 天(请看函数中的说明) | dw, w |
hour | 小时 | hh |
minute | 分钟 | mi, n |
second | 秒 | ss, s |
millisecond | 毫秒 | ms |
具体使用
本周:select * from table where datediff(week,SJ,getdate())=0 --SJ为日期字段
本月:select * from table where datediff(Month,SJ,getdate())=0 --SJ为日期字段
本季:select * from table where datediff(qq,SJ,getdate())=0
前半年1-6,后半年7-12:select * from table where datepart(mm,C_CALLTIME)/7 = datepart(mm,getdate())/7
sql得到当前系统时间得 日期部分CONVERT(varchar(10),getDate(),120)
上月
select * from tb where month(时间字段) = month(getdate()) - 1
本月
select * from tb where month(时间字段) = month(getdate())
下月
select * from tb where month(时间字段) = month(getdate()) + 1
--昨天
Select * From TableName Where DateDiff(dd, DateTimCol, GetDate()) = 1
--明天
Select * From TableName Where DateDiff(dd, GetDate(), DateTimCol) = 1
--最近七天
Select * From TableName Where DateDiff(dd, DateTimCol, GetDate()) <= 7
--随后七天
Select * From TableName Where DateDiff(dd, GetDate(), DateTimCol) <= 7
--上周
Select * From TableName Where DateDiff(wk, DateTimCol, GetDate()) = 1
--本周
Select * From TableName Where DateDiff(wk, DateTimCol, GetDate()) = 0
--下周
Select * From TableName Where DateDiff(wk, GetDate(), DateTimCol ) = 1
--上月
Select * From TableName Where DateDiff(mm, DateTimCol, GetDate()) = 1
--本月
Select * From TableName Where DateDiff(mm, DateTimCol, GetDate()) = 0
--下月
Select * From TableName Where DateDiff(mm, GetDate(), DateTimCol ) = 1
--------------------------------------------------------
本周
select * from tb where datediff(week , 时间字段 ,getdate()) = 0
上周
select * from tb where datediff(week , 时间字段 ,getdate()) = 1
下周
select * from tb where datediff(week , 时间字段 ,getdate()) = -1
--------------------------------------------------------
datepart(WEEK,addtime )=datepart(WEEK,getdate())datepart(month,addtime )=datepart(month,getdate())datepart(QUARTER,addtime )=datepart(QUARTER,getdate())datepart(Year,addtime )=datepart(Year,getdate())
sql 查询本周本月问题
---求相差天数
select datediff(day,'2004-01-01',getdate())
--1.一个月第一天的
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
--2.本周的星期一
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
select dateadd(wk,datediff(wk,0,getdate()),6)
--3.一年的第一天
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
--4.季度的第一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
--5.当天的半夜
SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)
--6.上个月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
--7.去年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
--8.本月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
--9.本年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
--10.本月的第一个星期一
select DATEADD(wk,
DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)
--查询本周注册人数
select count(*) from [user]
where datediff(week,create_day-1,getdate())=0
--上周注册人数
select count(*) from [user]
where datediff(week,create_day-1,getdate())=1
--本月注册人数
select count(*) from [user]
where datediff(month,create_day,getdate())=0
--上月注册人数
select count(*) from [user]
where datediff(month,create_day,getdate())=1
--如果要效率,这样写查询
--查询本周注册人数
select count(*) from [user]
where create_day>=dateadd(day,2-datepart(weekday,getdate()),convert(varchar,getdate(),112))
and create_day<dateadd(day,9-datepart(weekday,getdate()),convert(varchar,getdate(),112))
--上周注册人数
select count(*) from [user]
where create_day>=dateadd(day,-5-datepart(weekday,getdate()),convert(varchar,getdate(),112))
and create_day<dateadd(day,2-datepart(weekday,getdate()),convert(varchar,getdate(),112))
--本月注册人数
select count(*) from [user]
where create_day>=dateadd(day,1-day(getdate()),convert(varchar,getdate(),112))
and create_day<dateadd(month,1,dateadd(day,1-day(getdate()),convert(varchar,getdate(),112)))
--上月注册人数
select count(*) from [user]
where create_day>=dateadd(month,-1,dateadd(day,1-day(getdate()),convert(varchar,getdate(),112)))
and create_day<dateadd(day,1-day(getdate()),convert(varchar,getdate(),112))
--本周
select count(*) from User
where datediff(dd,create_day,getdate()) <= datepart(dw,getdate())
--上周
select count(*) from User
where datediff(dd,create_day,(getdate() - datepart(dw,getdate()))) <= 7
--本月
select count(*) from User
where datepart(mm,create_day) = datepart(mm,getdate())
--上月
select count(*) from User
where datepart(mm,create_day) = datepart(mm,getdate()) - 1
--本周
select count(*) from [User]
where datediff(dd,create_day,getdate()) <= datepart(dw,getdate())
--上周
select count(*) from [User]
where datediff(dd,create_day,(getdate() - datepart(dw,getdate()))) <= 7
--本月
select count(*) from [User]
where datepart(mm,create_day) = datepart(mm,getdate())
--上月
select count(*) from [User]
where datepart(mm,create_day) = datepart(mm,getdate()) - 1
学习
month(create_day)=month(getdate())本月
month(create_day)=month(getdate())-1 上月
补充 查询今日所有的
SELECT * from feedback WHERE (DATEDIFF(d,fedtime,GETDATE())=0) ORDER BY fedid DESC