• sql日期函数


      在MSSQLServer中可以用字符串来表示日期时间类型,数据库系统会自动在内部将它们转换为日期时间类型,比如“'2008-08-08'”、“2008-08-08 08:00:00”、“08:00:00” 、“2008-08-08 08:00:00.000000”等。

    1.日期、时间、日期时间、时间戳

         Date:日期是用来表示“年-月-日”信息的数据类型,其精度精确到“日”,其中包含了年、月、日三个信息,比如“2008-08-08”。

         时间是用来表示“小时:分:秒” 信息的数据类型,其精度精确到“秒”,其中包含了小时、分、秒三个信息,比如“19:00:00”。

         DateTime:日期时间是用来表示“年-月-日 小时:分:秒” 信息的数据类型,其精度精确到“秒”,其中包含了年、月、日、小时、分、秒六个信息,比如“2008-08-08 08:00:00”。

          TimeSpan:日期时间的精度精确到“秒”,这在一些情况下能够满足基本的要求,但是对于精度要求更加高的日期时间信息则无法表示。数据库中提供了时间戳类型用于表示这些对精度要求更加高的场合。时间戳类型还可以用于标记表中数据的版本信息,比如我们想区分表中两条记录插入表中的先后顺序,由于数据库操作速度非常快,如果用DateTime类型记输入插入时间的话,若两条记录插入的时间间隔非常短的话是无法区分它们的,这时就可以使用时间戳类型。在有的数据库系统中,如果对数据表中的记录进行了更新的话,数据库系统会自动更新其中的时间戳字段的值。

    2.取得当前日期时间 :GateDate()

    select getdate() as 当前日期时间 

    3.日期增减 :DateAdd()

         DateAdd() 函数在日期中添加或减去指定的时间间隔。DateAdd(datepart,number,date)。

         datepart 参数可以是下列的值:

                                                 

         number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。

         date 参数是合法的日期表达式。

    select dateadd(d,2,getdate()) as 后天此刻

    4.计算一个日期是星期几:DateName()

         DateName有两个参数:datepart,date。其中datepart于DateAdd一样,只不过DateAdd用于对日期的某个部分(part)进行操作,而DateName是进行获取。

    select datename(yyyy,getdate()) as 年,datename(m,getdate()) as 月,datename(d,getdate()) as

         如果使用Weekday(或者使用别名dw)做为datepart参数调用DATENAME()函数就可以得到一个日期是星期几。

    select datename(dw,getdate()) as 星期--结果:星期二

         可见这个函数可以返回一个日期的特定部分,并且尽量用名称来表述这个特定部分。

    5.取得日期的指定部分:DatePart()

         DatePart (datepart,date):参数datepart指定要返回的日期部分的参数,同上。其中参数date为待计算日期,date 参数也可以是日期格式的字符串。

         粗看起来,DATEPART()函数和DATENAME()函数完全一样,不过其实它们并不是只是名称不同的别名函数,虽然都是用来提取日期的特定部分的,不过DATEPART()函数的返回值是数字而DATENAME()函数则会将尽可能的以名称的方式做为返回值。

    select datename(dw,getdate()) as 星期--结果:星期二
    
    select datepart(dw,getdate()) as 星期--3

         结果不同,因为周日是一个星期的第一天。

    6.DateDiff() 函数返回两个日期之间的差值

         语法:

    DATEDIFF(datepart,startdate,enddate)

         其中datepart同上,startdate为开始时间,enddate为结束时间。startdate可以大于enddate.

    SELECT 
    datediff(yy,'2000-1-1','2010-1-1') AS DiffYear,
    datediff(m,'2000-1-1','2010-1-1') AS DiffMonth,
    datediff(dd,'2000-1-1','2010-1-1') AS DiffDate

    7.day(), month(),year() 

    SELECT 
        day(getdate()),
        month(getdate()),
        year(getdate()) 

    8.使用Convert()取得DateTime格式数据

    Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
    Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06
    Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16
    Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06
    Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06
    Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06
    Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06
    Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06
    Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46
    Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM
    Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06
    Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16
    Select CONVERT(varchar(100), GETDATE(), 12): 060516
    Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937
    Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967
    Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47
    Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157
    Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM
    Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
    Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47
    Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250
    Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM
    Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006
    Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16
    Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006
    Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006
    Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006
    Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006
    Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006
    Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49
    Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM
    Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006
    Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16
    Select CONVERT(varchar(100), GETDATE(), 112): 20060516
    Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513
    Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547
    Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49
    Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700
    Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827
    Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM
    Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM   

    9.当月的第一天 

    select  dateadd(mm,datediff(mm,0,getdate()),0)

         0表示:“1900-01-01 00:00:00.000”。datediff(mm,0,getdate())可以得到当前日期到“1900-01-01 00:00:00.000”直接相差的月份。然后用“1900-01-01 00:00:00.000”这个时间+相差的月份。就可以得到当前月的第一天。

    10.本周的星期一

    select dateadd(wk,datediff(wk,0,getdate()),0)  

    11.一年的第一天

    select  dateadd(yy,datediff(yy,0,getdate()),0) 

    12.当天的半夜

    select  dateadd(dd,datediff(dd,0,getdate()),0)  

    13.本月最后一天

    select dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+1,0))  

    14.本月的第一个星期一

    select  dateadd(wk,datediff(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())),0)

     15.某月的天数

    select  datediff(day,'2003-2-15','2003-3-15') 
    select  day(dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0))) 

    16.判断是否是润年

    select  
      case  
       day(dateadd(mm,2,dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate()),0)))) 
      when  28  
        then  '平年' 
        else  '闰年' 
      end  
                        
    select 
     case  
      datediff(day,datename(year,getdate())+'-02-01',dateadd(mm,1,datename(year,getdate())+'-02-01')) 
     when  28 
      then  '平年'
      else  '闰年'  
     end 

    如何实现只显示本月信息

    sql="select * from [table] where datediff(m,date,Now())=0"

    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

     
     
     

     
  • 相关阅读:
    [UWP] 为WinRT组件创建Nuget包
    再见北京,深圳你好
    [UWP] 用 AudioGraph 来增强 UWP 的音频处理能力——AudioFrameInputNode
    [UWP] 用 AudioGraph 来增强 UWP 的音频处理能力
    UWP 多语言的三个概念
    利用 Win32 启动和检测 UWP App 的方法
    反向代理教务系统
    [UWP] Custom Capability的使用
    [UWP]针对UWP程序多语言支持的总结,含RTL
    Xamarin自定义布局系列——支持无限滚动的自动轮播视图CarouselView
  • 原文地址:https://www.cnblogs.com/automation/p/2972657.html
Copyright © 2020-2023  润新知