MSSQL网站制作之SQL Server各类日期盘算办法之二
支持多种存储引擎。 上个月的最初一天这是一个盘算上个月最初一天的例子。它经由过程从一个月的最初一天这个例子上减往3毫秒来取得。有一点要记着,在SqlServer中工夫是准确到3毫秒。这就是为何我必要减往3毫秒来取得我要的日期和工夫。
SELECTdateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0))
盘算出来的日期的工夫部分包括了一个SqlServer能够纪录的一天的最初时候(“23:59:59:997”)的工夫。
客岁的最初一天
毗连下面的例子,为了要失掉客岁的最初一天,你必要在往年的第一天上减往3毫秒。
SELECTdateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate()),0))
本月的最初一天
如今,为了取得本月的最初一天,我必要略微修正一下取得上个月的最初一天的语句。修正必要给用DATEDIFF对照以后日期和“1900-01-01”前往的工夫距离上加1。经由过程加1个月,我盘算出下个月的第一天,然后减往3毫秒,如许就盘算出了这个月的最初一天。这是盘算本月最初一天的SQL剧本。
SELECTdateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0))
今年的最初一天
你如今应当把握这个的做法,这是盘算今年最初一天剧本
SELECTdateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate())+1,0))。
本月的第一个礼拜一
好了,如今是最初一个例子。这里我要盘算这个月的第一个礼拜一。这是盘算的剧本。
selectDATEADD(wk,DATEDIFF(wk,0,
dateadd(dd,6-datepart(day,getdate()),getdate())
),0)
在这个例子里,我利用了“本周的礼拜一”的剧本,并作了一点点修正。修正的部分是把本来剧本中“getdate()”部分交换成盘算本月的第6天,在盘算顶用本月的第6天来交换以后日期使得盘算能够取得这个月的第一个礼拜一。
总结
我但愿这些例子能够在你用DATEADD和DATEDIFF函数盘算日期时给你一点启示。经由过程利用这个盘算日期的工夫距离的数学办法,我发明为了显现两个日期之间距离的有效历法是有代价的。注重,这只是盘算出这些日期的一种办法。要切记,另有良多办法能够失掉不异的盘算了局。假设你有其他的办法,那很不错,如果你没有,我但愿这些例子能够给你一些启示,当你要用DATEADD和DATEDIFF函数盘算你程序大概要用到的日期时。
附录:其另日期处置办法
1)往失落时分秒
declare@datetime
set@=getdate()--2003-7-110:00:00
SELECT@,DATEADD(day,DATEDIFF(day,0,@),0)
2)显现礼拜几
selectdatename(weekday,getdate())
3)怎样获得某个月的天数
declare@mint
set@m=2--月份
selectdatediff(day,2003-+cast(@masvarchar)+-15,2003-+cast(@m+1asvarchar)+-15)
别的,获得本月天数
selectdatediff(day,cast(month(GetDate())asvarchar)+-+cast(month(GetDate())asvarchar)+-15,cast(month(GetDate())asvarchar)+-+cast(month(GetDate())+1asvarchar)+-15)
大概利用盘算本月的最初一天的剧本,然后用DAY函数区最初一天
SELECTDay(dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0)))
4)判别是不是闰年:
SELECTcaseday(dateadd(mm,2,dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate()),0))))when28then闰年else闰年end
大概
selectcasedatediff(day,datename(year,getdate())+-02-01,dateadd(mm,1,datename(year,getdate())+-02-01))
when28then闰年else闰年end
5)一个季度几天
declare@mtinyint,@timesmalldatetime
select@m=month(getdate())
select@m=casewhen@mbetween1and3then1
when@mbetween4and6then4
when@mbetween7and9then7
else10end
select@time=datename(year,getdate())+-+convert(varchar(10),@m)+-01
selectdatediff(day,@time,dateadd(mm,3,@time))
我们只需要把binlog文件反向执行,每个操作都执行逆操作即可。当然也不是所有的event都反转。Table_mapevent必须还是在Rows_log_event每个操作之前。 这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。 记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。 如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。 大侠们有推荐的书籍和学习方法写下吧。 再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。 一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。 having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。 多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。
页:
[1]