您的位置:新葡亰496net > 网络数据库 > SQL一些时间格式的转换,2005中如何获取日期

SQL一些时间格式的转换,2005中如何获取日期

发布时间:2019-09-15 20:19编辑:网络数据库浏览(73)

    1. 本月的第一天
      SELECT  DATEADD(mm,  DATEDIFF(mm,0,getdate()),  0) 

    2. 前段时代的末梢一天
      SELECT  dateadd(ms,-3,DATEADD(mm,  DATEDIFF(m,0,getdate()) 1,  0)) 

    convert日期转变格式为20或120时,获得的字符串是不带纳秒的。
    如 select CONVERT(VARCHAR(23),getdate(),120或20)
    2003-01-07 21:46:43

    那是测算贰个月第一天的SQL 脚本:   SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) --本月的率后天

    习认为常,你要求得到当今天子和总计一些其余的日期,举个例子,你的次第也许要求看清三个月的第一天只怕最终一天。你们超过1/4人民代表大会概都知情哪些把日子实行剪切(年、月、日等),然后仅仅用分割出来的年、月、日等位居多少个函数中总括出团结所必要的日期!在那篇小说里,作者将报告您怎么着利用DATEADD和DATEDIFF函数来计量出在你的程序中大概你要用到的一部分不等日期。
    在选取本文中的例子此前,你必需注意以下的难题。一大半或然不是怀有例子在分化的机械上推行的结果可能不一样样,这一丝一毫由曾几何时是三个礼拜的第一天这一个装置决定。第一天(DATEFI途睿欧ST)设定调整了您的种类应用什么时候作为二十八日的率后天。全数以下的例证都是以星期日看成一周的首先天来创设,也便是率后天设置为7。假若你的率先天设置不雷同,你可能须要调解那一个事例,使它和分化的首后天设置相契合。你可以由此@@DATEFI酷威ST函数来检查第一天设置。

    3.前八个月的第一天
    select dateadd(m,-1,  DATEADD(mm,  DATEDIFF(mm,0,getdate()),  0))

    日子调换格式为21或121时,获得的字符串是带微秒的
    select CONVERT(VARCHAR(23),getdate(),121或21)
    2003-01-07 21:47:34.360

    SELECT DATEADD(mm, DATEDIFF(mm,0,getdate())-1, 0) --前段日子的率后天

    为了明白那一个事例,大家先复习一下DATEDIFF和DATEADD函数。DATEDIFF函数总括三个日子之间的钟点、天、周、月、年等日子间隔总的数量。DATEADD函数总结贰个日期通过给时间距离加减来获得二个新的日子。要询问更加的多的DATEDIFF和DATEADD函数以及时光距离能够阅读微软联机支持。

    1. 上月的末尾一天 
      SELECT  dateadd(ms,-3,DATEADD(mm,  DATEDIFF(mm,0,getdate()),  0)) 

    2. 本周的周四
      SELECT  DATEADD(wk,  DATEDIFF(wk,0,getdate()),  0)

    东瀛专门的学问
    日期转变格式为111时,得到的字符串是yyyy/mm/dd
    select CONVERT(VARCHAR(23),getdate(),111)
    2003/01/07

    SELECT DATEADD(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate()) 1, 0))  --前段日子的尾声一天

    应用DATEDIFF和DATEADD函数来计算日期,和自然从近来几日子转形成您须要的日子的思考方法有些差异。你必须从时间间隔这几个方面来思虑。比方,从脚下日期到你要收获的日期之间有多少日子间隔,可能,从前日到某一天(比方壹玖零贰-1-1)之间有稍许日子间隔,等等。明白什么着重于小运距离有利于你轻便的领会自个儿的两样的日子总计例子。

    6.本周的星期六
    select dateadd(d, 6 ,DATEADD(wk,  DATEDIFF(wk,0,getdate()),  0) )

    切实参见convert help

    SELECT DATEADD(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate()), 0))  --上三个月的最后一天

    一个月的首后天

    7.前一周的星期一
    select dateadd(d,-7 ,DATEADD(wk,  DATEDIFF(wk,0,getdate()),  0) )

    不带世纪数位 (yy) 带世纪数位 (yyyy) 标准 输入/输出**

    我们把这几个讲话分开来探视它是何许做事的。最核心的函数是getdate(),超越三分之一人都领悟这一个是再次来到当前的日子和岁月的函数。下贰个推行的函数 DATEDIFF(mm,0,getdate())是测算当明天子和“一九零三-01-01 00:00:00.000”这一个日期之间的月数。记住:时期和岁月变量和微秒一样是从“1903-01-01 00:00:00.000”开头估量的。那正是干什么你能够在DATEDIFF函数中内定第多个小时表明式为“0”。下贰个函数是DATEADD,扩张当 前日期到“一九〇一-01-01”的月数。通过扩张预订义的日期“一九零三-01-01”和目明日期的月数,大家得以博得前段日子的率先天。其余,总计出来 的日期的大运部分将会是“00:00:00.000”。
      
      这一个计算的技艺是先总结当明日期到“一九〇〇-01-01”的大运间隔数,然后把它加到“一九〇五-01-01”上来得到特殊的日期,那几个技艺可以用来计算相当多比不上的日子。下二个例子也是用这一个本事从脚下日期来发出区别的日子。

    率先个例子,小编将告诉你什么样从眼后天子去前一个月的尾声一天。请留神:那么些事例以及那篇小说中的其他例子都将只使用DATEDIFF和DATEADD函数来总括我们想要的日期。每一个例子都将透过测算但前的时刻间隔,然后开展加减来获取想要计算的日期。

    8.下一周的周末
    select dateadd(d,-1 ,DATEADD(wk,  DATEDIFF(wk,0,getdate()),  0) )

    • 0 或 100 (*) 默认值 mon dd yyyy hh:miAM(或 PM)
      1 101 美国 mm/dd/yyyy
      2 102 ANSI yy.mm.dd
      3 103 英国/法国 dd/mm/yy
      4 104 德国 dd.mm.yy
      5 105 意大利 dd-mm-yy
      6 106 - dd mon yy
      7 107 - mon dd, yy
      8 108 - hh:mm:ss
    • 9 或 109 (*) 默认值 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM)
      10 110 美国 mm-dd-yy
      11 111 日本 yy/mm/dd
      12 112 ISO yymmdd
    • 13 或 113 (*) 亚洲默许值 纳秒 dd mon yyyy hh:mm:ss:mmm(24h)
      14 114 - hh:mi:ss:mmm(24h)
    • 20 或 120 (*) ODBC 规范 yyyy-mm-dd hh:mm:ss[.fff]
    • 21 或 121 (*) ODBC 规范(带毫秒) yyyy-mm-dd hh:mm:ss[.fff]
    • 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(不含空格)
    • 130* 科威特 dd mon yyyy hh:mi:ss:mmmAM
    • 131* 科威特 dd/mm/yy hh:mi:ss:mmmAM

    本周的礼拜一
      
      这里笔者是用周(wk)的年华距离来计量几时是本周的周四。
      
      SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
      
    SQL一些时间格式的转换,2005中如何获取日期。  一年的率后天   
      今后用年(yy)的时刻间隔来呈现这年的率后天。
      
      SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) 

    那是计算3个月第一天的SQL 脚本:
    SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)

    1. 一年的首后天
      SELECT  DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0) 

    2. 季度的第一天
      SELECT  DATEADD(qq,  DATEDIFF(qq,0,getdate()),  0) 

    3. 二零一八年的末段一天
      SELECT  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0))

    4. 前些时间的第叁个星期四
      select  DATEADD(wk,  DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate)),getdate))),0)

    5. 前一季度的尾声一天
      SELECT  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate()) 1,  0))。

    SQL Server各个日期计算办法之二  前段时间的终极一天
      
      那是贰个计算后半年最后一天的例子。它经过从四个月的最终一天那么些事例上减小3飞秒来取得。有少数要记住,在Sql Server中时间是准确到3微秒。那正是干什么自身急需减小3皮秒来获得小编要的日期和时间。
      
      SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
      
      计算出来的日子的时间有个别含有了三个Sql Server可以记录的一天的终极时刻(“23:59:59:997”)的时日。
      
      二〇一八年的结尾一天
      
      连接上边的例子,为了要拿走2018年的终极一天,你要求在当年的首后天上缩小3皮秒。
      
      SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
      
      前些日子的结尾一天
      
      未来,为了博取上个月的末尾一天,小编须要某个修改一下获得后贰个月的末梢一天的言语。修改需求给用DATEDIFF相比当后日期和“一九零四-01-01” 再次回到的时间间隔上加1。通过加1个月,笔者总括出当月的率后天,然后减去3纳秒,那样就总计出了后一个月的终极一天。这是持筹握算后一个月最终一天的SQL脚本。
      
      SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate()) 1, 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) 
      
      在那一个事例里,作者利用了“本周的星期二”的台本,并作了一小点改变。修改的一对是把原来剧本中“getdate()”部分替换来计算上个月的第6天,在图谋中用前些时间的第6天来替换当前些天期使得计算能够获得前段时间的首先个星期四。
      
      总结
      
      笔者希望那些事例可以在你用DATEADD和DATEDIFF函数总括日期时给您或多或少启示。通过运用那几个总结日期的年月距离的数学方法,我发觉为了展现多少个日子之间间隔的有用历法是有价值的。注意,那只是估测计算出那几个日子的一种格局。要记住,还只怕有大多方法可以获得一致的测算结果。若是你有别的的点子,那很科学,倘使你未有,作者期待这几个事例能够给你某些启示,当你要用DATEADD和DATEDIFF函数总结你程序恐怕要用到的日龙时。

    季度的率后天   
      若是你要总结那些季度的第一天,这几个事例告诉您该怎么办。
      
      SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
      
      同一天的深夜   
      曾经需求经过getdate()函数为了重返时间值截掉时间部分,就能够设想到当下日子是还是不是在深夜。就算那样,那个事例使用DATEDIFF和DATEADD函数来得到深夜的时间点。
      
      SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)
      
    深深DATEDIFF和DATEADD函数总括
      
      你能够知道,通过应用轻便的DATEDIFF和DATEADD函数总括,你能够开掘大多不等的也有含义的日子。 
    方今结束的富有例子只是一味总计当前的岁月和“一九零二-01-01”之间的小时距离数量,然后把它加到“一九零二-01-01”的时间间隔上来测算出日 期。假定你改改时间距离的数目,或许使用不相同的时日距离来调用DATEADD函数,只怕缩减时间距离并非充实,那么通过那么些小的调解你能够发掘和多差别的日子。
      
      这里有八个例证使用别的四个DATEADD函数来计算最后一天来分别替换DATEADD函数前后四个小时间隔。
      前些日子的结尾一天   
      那是三个计量前段时期最后一天的事例。它经过从一个月的末尾一天这一个事例上压缩3微秒来获得。有少数要记住,在Sql Server中时间是正确到3毫秒。那正是干什么自身索要减小3微秒来获得小编要的日期和时间。
      
      SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
      
      总计出来的日子的年月某些含有了一个Sql Server能够记录的一天的结尾时刻(“23:59:59:997”)的小时。
      
      2018年的终极一天  接连上边的事例,为了要博得2018年的结尾一天,你供给在当年的第一天上减小3纳秒。
      
      SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
      
      当月的终极一天
      
      未来,为了博取前些时间的尾声一天,作者急需有些修改一下获取前些时间的最后一天的言语。修改要求给用DATEDIFF比较当今天期和“一九零一-01-01”重回的年月间隔上加1。通过加1个月,作者总括出前些时间的首后天,然后减去3皮秒,那样就总结出了后一个月的结尾一天。那是持筹握算前段时间最后一天的SQL脚本。
      
      SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate()) 1, 0))

    作者们把那一个讲话分开来看看它是怎样工作的。最中央的函数是getdate(),当先50%人都精晓那些是回来当前的日子和岁月的函数。下一个进行的函数DATEDIFF(mm,0,getdate())是测算当今日子和“一九零五-01-01 00:00:00.000”这些日期之间的月数。记住:时代和岁月变量和纳秒一样是从“1901-01-01 00:00:00.000”早先图谋的。那就是怎么您能够在DATEDIFF函数中钦命第1个时间表明式为“0”。下二个函数是DATEADD,扩张领后天子到“一九〇一-01-01”的月数。通过扩展预约义的日期“一九〇一-01-01”和当前日子的月数,大家得以博得当月的率后天。别的,总计出来的日期的光阴有些将会是“00:00:00.000”。

    Sql Server中的日期与时光函数 
    1.  当前系统日期、时间 
        select getdate() 

      附录:别的日期管理办法
      
      1)去掉时分秒

      select DATEADD(mm,1,getdate())-1
       
      二〇一五年的最终一天   你今后应该调节这几个的做法,那是总计前一季度最终一天脚本
      
      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)
      
      在那几个事例里,作者动用了“本周的星期二”的本子,并作了一丢丢改造。修改的部分是把本来剧本中“getdate()”部分替换到总括前些日子的第6天,在测算中用前一个月的第6天来替换当前天期使得总计可以博得下月的率先个星期五。
      
    总结   
      作者梦想那么些事例可以在您用DATEADD和DATEDIFF函数总结日期时给您或多或少启发。通过动用那一个总结日期的小时间隔的数学方法,笔者发掘为了显得两个日期之间间距的有用历法是有价值的。注意,那只是计量出这一个日子的一种艺术。要铭记,还应该有十分的多艺术 能够博得平等的推断结果。假设你有其余的法门,那很准确,假让你未曾,笔者盼望那一个事例能够给你有些启迪,当你要用DATEADD和DATEDIFF函数总计你程序只怕要用到的日期时。
    附录:一些日子的管理办法汇总

    以此总结的技术是先计算当前天子到“一九〇二-01-01”的岁月间隔数,然后把它加到“一九〇二-01-01”上来博取特殊的日子,那个技艺能够用来总括比比较多分歧的日期。下一个例子也是用这几个本事从眼后天子来发出不一致的日期。

    1. dateadd  在向钦命日期加上一段时间的基础上,重回新的 datetime 值
         比如:向日期加上2天 
         select dateadd(day,2,'2004-10-15')  --返回:2004-10-17 00:00:00.000

    2. datediff 重返跨四个钦定日期的日子和岁月界限数。
         select datediff(day,'2004-09-01','2004-09-18')   --返回:17

    3. datepart 重回代表钦定日期的钦定日期部分的莫西干发型。
        SELECT DATEPART(month, '2004-10-15')  --返回 10

    4. datename 重回代表钦命日期的钦点日期部分的字符串
         SELECT datename(weekday, '2004-10-15')  --返回:星期五

    5. day(), month(),year() --能够与datepart对照一下

     declare @ datetime
      set @ = getdate() --'2003-7-1 10:00:00'
      SELECT @,DATEADD(day, DATEDIFF(day,0,@), 0) 

    上月的率后天 SELECT DATEADD(mm, DATEDIFF(mm ,0,getdate())-2, 0)
    前段时间的末梢一天 SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))

    本周的礼拜四

    select 当明日子=convert(varchar(10),getdate(),120) 
    ,当前岁月=convert(varchar(8),getdate(),114)

     
      2)呈现星期几

    上个月率后天 SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
    今年第一天
    SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
    本周首后天
    SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
    后年第一天
    SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
    明日去掉时分秒 SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)
    前些日子最终一天 1、SELECT DATEADD(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate()) 1, 0))

    此间本人是用周(wk)的年月间隔来总计几时是本周的周三。

    select datename(dw,'2004-10-15')

      

    2、SELECT DATEADD(dd,-day(getdate()),DATEADD(m,1,getdate()))
    前段时间中先个周三 select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)
    下月最终一天
    SELECT DATEADD(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
    二〇一八年最终一天 SELECT DATEADD(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)) 
    去掉时分秒
    declare @ datetime
    set @ = getdate() --'2003-7-1 10:00:00'
    SELECT @,DATEADD(day, DATEDIFF(day,0,@),0)
    前天是星期几 select datename(weekday,getdate())
    获取某月天数 declare @y varchar(8)
    declare @m int
    set @y='2004'
    set @m=2 --月份
    select DATEDIFF(day,@y '-' cast(@m as varchar) '-15' ,@y '-' cast(@m 1 as varchar) '-15')
    看清是还是不是闰年 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
    多个季度多少天 declare @m tinyint,@time smalldatetime
    select @m=month(getdate())
    select @m=case when @m between 1 and 3 then 1
    when @m between 4 and 6 then 4
    when @m between 7 and 9 then 7
    else 10 end
    select @time=datename(year,getdate()) '-' convert(varchar(10),@m) '-01'
    select datediff(day,@time,dateadd(mm,3,@time))

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

    select 今年第多少周=datename(week,'2003-10-15')
          ,前几天是周几=datename(weekday,'二〇〇四-10-15')

      select datename(weekday,getdate()) 
      3)如何获取某些月的小运

    一年的首后天

      declare @m int
      set @m=2 --月份
      select datediff(day,'2003-' cast(@m as varchar) '-15' ,'2003-' cast(@m 1 as varchar) '-15')
      别的,获得上一个月天数
      select datediff(day,cast(month(GetDate()) as varchar) '-' cast(month(GetDate()) as varchar) '-15' ,cast(month(GetDate()) as varchar) '-' cast(month(GetDate()) 1 as varchar) '-15')
      只怕应用计算前段时间的末梢一天的台本,然后用DAY函数区最终一天
      SELECT Day(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate()) 1, 0))) 
      4)判别是或不是闰年:

    当今用年(yy)的时日间隔来呈现今年的首后天。

    sql日期格式转变

      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 

    SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)


      
      5)一个季度多少天  

    季度的首先天

    起点:CSDN   宣布会员:新书城搜罗整理   发表时间:二零零六-7-31   名气:384
     
     
    在sql中,smalldatetime及datetime型的数据展现不是那么令人看中,由此小编找了些格式化的措施列出来"

      declare @m tinyint,@time smalldatetime
      select @m=month(getdate())
      select @m=case when @m between 1 and 3 then 1
      when @m between 4 and 6 then 4
      when @m between 7 and 9 then 7
      else 10 end
      select @time=datename(year,getdate()) '-' convert(varchar(10),@m) '-01'
      select datediff(day,@time,dateadd(mm,3,@time))

    一经你要计算那几个季度的率后天,这么些例子告诉你该如何是好。

    convert(char(10),datetime,101)

    SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)

    在数量库取出来的时候就转变好
     select getdate()
     
     2006-05-12 11:06:08.177
     
     笔者收拾了刹那间SQL Server里面恐怕时时会用到的日期格式调换方法:
     
     比如如下:
     select Convert(varchar(10),getdate(),120)

    当日的半夜三更

    2006-05-12 
     select CONVERT(varchar, getdate(), 120 )
     2006-05-12  11:06:08

    一度须求通过getdate()函数为了再次来到时间值截掉时间有个别,就能够思索到当下日期是否在凌晨。如果那样,这些例子使用DATEDIFF和DATEADD函数来获得深夜的时间点。

     select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')
     20060512110608
     
     select CONVERT(varchar(12) , getdate(), 111 )
     2006/05/12
     
     select CONVERT(varchar(12) , getdate(), 112 )
     20060512

    SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)

     select CONVERT(varchar(12) , getdate(), 102 )
     2006.05.12
     
     其它三种不经常用的日子格式转变方法:

    深深DATEDIFF和DATEADD函数总结

     select CONVERT(varchar(12) , getdate(), 101 )
     0612/2005 select CONVERT(varchar(12) , getdate(), 103 )
     12/09/2004

    你能够清楚,通过选拔简便的DATEDIFF和DATEADD函数计算,你能够发掘好些个见仁见智的也可能有含义的日子。

     select CONVERT(varchar(12) , getdate(), 104 )
     12.05.2006

    近些日子停止的持有例子只是单纯总结当前的光阴和“1905-01-01”之间的光阴距离数量,然后把它加到“一九〇三-01-01”的时光距离上来计量出日期。假定你改改时间间隔的数码,也许利用不相同的年月距离来调用DATEADD函数,或然缩长时间间隔并不是扩充,那么通过这几个小的调动你可以发掘和多分裂的日子。

     select CONVERT(varchar(12) , getdate(), 105 )
     12-05-2006

    这里有多个例子使用另外一个DATEADD函数来计算最后一天来分别替换DATEADD函数前后三个日子距离。

     select CONVERT(varchar(12) , getdate(), 106 )
     12 05 2006

    近些日子的末梢一天

     select CONVERT(varchar(12) , getdate(), 107 )
     05 12, 2006

    那是两个总结这几天最后一天的事例。它经过从七个月的末段一天那些事例上减小3纳秒来获得。有有些要铭记在心,在Sql Server中时间是标准到3飞秒。那就是为啥自身索要减弱3微秒来博取小编要的日子和岁月。

     select CONVERT(varchar(12) , getdate(), 108 )
     11:06:08
     
     select CONVERT(varchar(12) , getdate(), 109 )
     0512 2006 1

    SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))

     select CONVERT(varchar(12) , getdate(), 110 )
     09-12-2004

    总计出来的日期的日子某个含有了贰个Sql Server能够记下的一天的结尾时刻(“23:59:59:997”)的年华。

     select CONVERT(varchar(12) , getdate(), 113 )
     12 052006

    二零一八年的终极一天

     select CONVERT(varchar(12) , getdate(), 114 )
     11:06:08.177  

    连日上面包车型客车例子,为了要得到二〇一八年的结尾一天,你供给在当年的首后天上缩小3飞秒。

    ============================================================================================
    实例演习

    SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))

    select * from salesmb
    select count(*) from salesdreport where employeeid='11'and productsid='7' and (updatetime between '二零零七-8-1 00:00:00'and '二〇〇六-8-三千:00:00') --发售数量
    select sum(sales) from salesmb where eid='11'and productsid='7' and (mbrq between '二零零六-8-1 00:00:00'and '二〇〇六-8-30 00:00:00') --目的数据

    上一个月的结尾一天

    select dateadd(d,-day(getdate()),getdate())

    后天,为了拿走上一个月的末尾一天,小编须要有个别修改一下获得上月的末梢一天的说话。修改必要给用DATEDIFF相比领后天期和“一九零三-01-01”再次来到的时光间隔上加1。通过加1个月,小编总结出下月的第一天,然后减去3微秒,那样就总结出了上月的终极一天。那是持筹握算前一个月最后一天的SQL脚本。

    select cast(year(getdate()) as nvarchar) '-' cast(month(getdate()) as varchar) '-1 00:00'
    select cast(year(getdate()) as nvarchar) '-' cast(month(getdate()) as varchar) '-' cast(day(getdate()) as varchar)

    SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate()) 1, 0))

    select dateadd(m,1,dateadd(d,-day(getdate()),getdate()))

    现年的尾声一天

    select dateadd(m,1,getdate())

    你以后应有了然这些的做法,那是测算前一季度最后一天脚本

    =====================================================================================================================================================

    SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()) 1, 0))。

    select * from salesmb
    select count(*) from salesdreport where employeeid='11'and productsid='7' and (updatetime between '二零零五-8-1 00:00:00'and '二〇〇五-8-3000:00:00') --发卖数量
    select sum(sales) from salesmb where eid='11'and productsid='7' and (mbrq between '2005-8-1 00:00:00'and '二〇〇五-8-30 00:00:00') --指标数据

    前段日子的第贰个周四

    select dateadd(d,-day(getdate()),getdate())

    好了,现在是终极八个例证。这里笔者要总结上月的首先个周五。那是一个钱打二十五个结的脚本。

    select cast(year(getdate()) as nvarchar) '-' cast(month(getdate()) as varchar) '-1 00:00'
    select cast(year(getdate()) as nvarchar) '-' cast(month(getdate()) as varchar) '-' cast(day(getdate()) as varchar)

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

    select dateadd(m,1,dateadd(d,-day(getdate()),getdate()))

    在那个例子里,作者利用了“本周的星期三”的剧本,并作了一丝丝退换。修改的某些是把原本剧本中“getdate()”部分替换来总结前一个月的第6天,在企图中用前段日子的第6天来替换当后日期使得总结能够赢得前段时期的首先个星期五。

    select dateadd(m,1,getdate())

    总结

    ======================================================================================================================================================

    自己愿意那个事例能够在你用DATEADD和DATEDIFF函数总结日期时给你或多或少启示。通过接纳那个总结日期的日子距离的数学方法,笔者意识为了展示几个日子之间距离的有用历法是有价值的。注意,那只是一个钱打二16个结出那个日子的一种格局。要牢记,还或然有为数非常多格局能够赢得同样的乘除结果。假如你有另外的艺术,那很不错,即便你从未,作者期望那一个事例能够给您有的启发,当您要用DATEADD和DATEDIFF函数总结你程序或然要用到的日期时。

    select * from salesmb
    select count(*) from salesdreport where employeeid='11'and productsid='7' and (updatetime between '2007-8-1 00:00:00'and '二〇〇六-8-三千:00:00') --贩卖数量
    select sum(sales) from salesmb where eid='11'and productsid='7' and (mbrq between '二零零七-8-1 00:00:00'and '2005-8-30 00:00:00') --目的数据


    select dateadd(d,-day(getdate()),getdate())

    附录,其余日期管理方法

    select cast(year(getdate()) as nvarchar) '-' cast(month(getdate()) as varchar) '-1 00:00'
    select cast(year(getdate()) as nvarchar) '-' cast(month(getdate()) as varchar) '-' cast(day(getdate()) as varchar)

    1)去掉时分秒
    declare @ datetime
    set @ = getdate() --'2003-7-1 10:00:00'
    SELECT @,DATEADD(day, DATEDIFF(day,0,@), 0)

    select dateadd(m,1,dateadd(d,-day(getdate()),getdate()))

    2)展现星期几
    select datename(weekday,getdate())

    select dateadd(m,1,getdate())

    3)怎么着获得有个别月的运气
    declare @m int
    set @m=2 --月份
    select datediff(day,'2003-' cast(@m as varchar) '-15' ,'2003-' cast(@m 1 as varchar) '-15')
    另外,取得上一个月运气
    select datediff(day,cast(month(GetDate()) as varchar) '-' cast(month(GetDate()) as varchar) '-15' ,cast(month(GetDate()) as varchar) '-' cast(month(GetDate()) 1 as varchar) '-15')
    依旧选择总括后一个月的尾声一天的本子,然后用DAY函数区最后一天
    SELECT Day(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate()) 1, 0)))

     

    4)剖断是不是闰年:
    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

    ===============================================================================================================================

    5)叁个季度多少天
    declare @m tinyint,@time smalldatetime
    select @m=month(getdate())
    select @m=case when @m between 1 and 3 then 1
    when @m between 4 and 6 then 4
    when @m between 7 and 9 then 7
    else 10 end
    select @time=datename(year,getdate()) '-' convert(varchar(10),@m) '-01'
    select datediff(day,@time,dateadd(mm,3,@time))

    select getdate()
    select dateadd(d,1,dateadd(d,-day(getdate()),getdate())) "00:00"

    declare @sdate smalldatetime
    select cast(year(getdate()) as nvarchar) '-' cast(month(getdate()) as varchar) '-1 00:00'
    select @sdate
    select dateadd(day,-1,dateadd(Month,1,@sdate))

    select cast(year(getdate()) as nvarchar) '-' cast(month(getdate()) as varchar) '-1 00:00'

    select dateadd(d,-day(getdate()),getdate())

    select dateadd(day,-1,dateadd(Month,1,cast(year(getdate()) as nvarchar) '-' cast(month(getdate()) as varchar) '-1 00:00'))

    select dateadd(d,-day(getdate()),getdate())

    select dateadd(d,1,dateadd(d,-day(getdate()),getdate()))
    select dateadd(m,

    SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
    SELECT dateadd(ms,0,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))

    原来的书文出处:

    本文由新葡亰496net发布于网络数据库,转载请注明出处:SQL一些时间格式的转换,2005中如何获取日期

    关键词:

上一篇:哈希索引原理,内存优化表的DMV

下一篇:没有了