SQLserver中常用日期时间函数

作者:袖梨 2022-06-29

统计在数据库中是最常见也是必不可少的,前段时间用Teechat控件使用统计遇到的一些SQL语句整理一下,重点常用函数有datediff()和datepart(),下面大概讲述下这些函数.

 代码如下 复制代码

1.一个月第一天的

Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)


2.本周的星期一

Select DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)


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)

 

计算时间的函数中有,年(yy),季(q),月(m),周(ww),时期(w),天(d),时(hh),分(n),秒(s)

getdate():返回当前日期

获取当前月份的天数:

 代码如下 复制代码

select datediff(d,getdate(),dateadd(m,1,getdate()))

获取当前年,季,月,周,天,时,分,秒:

 代码如下 复制代码


select datepart(yy,getdate()) //年
select datepart(q,getdate())  //季
select datepart(m,getdate())  //月
select datepart(ww,getdate())//周
select datepart(w,getdate())  //星期,从0开始.
select datepart(d,getdate())  //天
select datepart(hh,getdate())//时
select datepart(n,getdate()) //分
select datepart(s,getdate()) //秒

获取当前天的前后五天日期:

 代码如下 复制代码

select dateadd(dd,5,getdate())
select dateadd(dd,-5,getdate())

获取当前日期与目标日期相差的年,月,周,日,时,分,秒:

 代码如下 复制代码


select datediff(yy,'2005-01-01 14:12:01',getdate())
select datediff(q,'2005-01-01 14:12:01',getdate())
select datediff(m,'2005-01-01 14:12:01',getdate())
select datediff(ww,'2005-01-01 14:12:01',getdate())
select datediff(d,'2005-01-01 14:12:01',getdate())
select datediff(hh,'2005-01-01 14:12:01',getdate())
select datediff(n,'2005-01-01 14:12:01',getdate())
select datediff(s,'2005-01-01 14:12:01',getdate())

获取当前月份添加的信息:

 代码如下 复制代码


select count(*) as num, Origin from ks_article month(getdate())=DatePart("m",adddate) group by Origin

附ql server 2008 r2日期时间函数

 代码如下 复制代码

/*

Environment: win7 + sql server 2008 r2
Author: CC
Desctiption:
    常用日期函数整理:
    DAY,MONTH,YEAR  , DATEPART
    DATEADD,DATENAME ,
    DATEDIFF ,isdate 的使用
*/

--截取一个时间的年,月,日
select DAY(GETDATE())
      ,MONTH(GETDATE()) --MONTH() 函数的参数为整数时,一律返回整数值1,即SQL Server 认为其是1900 年1 月。
      ,YEAR(GETDATE())  --其日期值应在1753年到9999年之间,这是SQL Server系统所能识别的日期范围,否则会出现错误。
--运用DATEPART函数
UNION ALL
SELECT  DATEPART(DAY , GETDATE())
        ,DATEPART(MONTH , GETDATE())
        ,DATEPART(YEAR , GETDATE())
/*
(无列名)    (无列名)    (无列名)
   7    2012
   7    2012
*/

SELECT DATENAME (DD,GETDATE())  --返回类型为字符型
 /* (无列名)
     */

--用 dateadd 来获得下一个时间或之前的时间日期

 select   DATEADD (DD , 1 , getdate())  --当前时间的下一天
        , DATEADD (MM , 1 , getdate())  --当前时间的下一个月
        , DATEADD (YY , 1 , getdate())  --当前时间的下一年
        , DATEADD (DD , -1 , getdate()) --当前时间的前一天
        , DATEADD (MM , -1 , getdate()) --当前时间的前一个月
        , DATEADD (YY , -1 , getdate()) --当前时间的前一年
       
--2012-07-18 15:47:05.663    2012-08-17 15:47:05.663    2013-07-17 15:47:05.663    2012-07-16 15:47:05.663    2012-06-17 15:47:05.663    2011-07-17 15:47:05.663

SELECT DATEDIFF(DD,'2012-07-11 15:03:11.623',GETDATE())   --时间差
--6

SELECT DATENAME(dayofyear,GETDATE()) ,DATEDIFF(dd,'2012-01-01',getdate())
--199    198

SELECT DATENAME(year, GETDATE())  
    ,DATENAME(month,  GETDATE())   
    ,DATENAME(day,  GETDATE())    
    ,DATENAME(week,GETDATE())
    ,DATENAME(dayofyear, GETDATE())
    ,DATENAME(weekday,  GETDATE()); 
 --2012    July    17    29    199    Tuesday
      
SELECT DATENAME(hour, GETDATE())  --当天的第几个小时
    ,DATENAME(minute,GETDATE())          --当天小时的第几分
    ,DATENAME(second, GETDATE());      --当天小时分钟的第几秒
---15    48    9

SELECT ISDATE('2012-07-17') UNION ALL
SELECT ISDATE('2012-07-17 15:12:00') UNION ALL
SELECT ISDATE(111)
/*

 

*/

/*
函数        语法                                返回值                                            返回数据类型   
DAY            DAY ( date )                        返回表示指定 date 的“日”部分的整数。            int    具有确定性
MONTH        MONTH ( date )                        返回表示指定 date 的“月”部分的整数。            int    具有确定性
YEAR        YEAR ( date )                        返回表示指定 date 的“年”部分的整数。            int    具有确定性
DATENAME    DATENAME ( datepart , date )        返回表示指定日期的指定 datepart 的字符串。        nvarchar   
DATEPART    DATEPART ( datepart , date )        返回表示指定 date 的指定 datepart 的整数。        int   
DATEDIFF    DATEDIFF ( datepart , startdate , enddate )    返回两个指定日期之间所跨的日期或时间 datepart 边界的数目。    int    具有确定性
DATEADD        DATEADD (datepart , number , date )    通过将一个时间间隔与指定 date 的指定 datepart 相加,返回一个新的 datetime 值。   

ISDATE        ISDATE ( expression )    确定 datetime 或 smalldatetime 输入表达式是否为有效的日期或时间值。
            int    只有与 CONVERT 函数一起使用,同时指定了 CONVERT 样式参数且样式不等于 0、100、9 或 109 时,ISDATE 才是确定的。
*/

相关文章

精彩推荐