ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:28.22KB ,
资源ID:4795488      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-4795488.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(SQL时间函数.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

SQL时间函数.docx

1、SQL时间函数SQL时间函数2007-12-20 16:00中日期函数的用法悬赏分:5 - 解决时间:2007-3-13 20:40DATEADDDAYDATEDIFFGETDATEDATENAME等函数的用法. 想查询2007年2月9日的付款流水有单笔交易出现多张小票号的情况的小票号,该用什么语句?提问者: 420329630 - 助理 二级 最佳答案1.DateAdd ( I , N , D ) 将一个日期加上一段期间后的日期。 I :设定一个日期( Date )所加上的一段期间的单位。譬如 interval=d 表示 N的单位为日。 I的设定值如下: yyyy Year 年 q Quar

2、ter 季 m Month 月 d Day 日 w Weekday 星期 h Hour 时 n Minute 分 s Second 秒 N :数值表达式,设定一个日期所加上的一段期间,可为正值或负值,正值表示加(结果为 date 以后的日期),负值表示减(结果为 date 以前的日期)。 D :待加减的日期。 例子: DateAdd ( m , 1 , 31-Jan-98) 结果: 28-Feb-98 说明:将日期 31-Jan-98 加上一个月,结果为 28-Feb-98 而非 31-Fe-98 。 例子: DateAdd ( d , 20 , 30-Jan-99) 结果: 1999/2/9

3、 说明:将一个日期 30-Jan-99 加上 20 天后的日期。 2.Day( 日期的字符串或表达式 ) 传回日期的日部份。 例子: Day( 12/1/1999 ) 结果: 1 3.DateDiff (I , D1 , D2,FW,FY) 计算两个日期之间的期间。 I :设定两个日期之间的期间计算之单位。譬如 I=m 表示计算的单位为月。 I 的设定值如: yyyy Year 年 q Quarter 季 m Month 月 d Day 日 w Weekday 星期 h Hour 时 n Minute 分 s Second 秒 D1 ,D2:计算期间的两个日期表达式,若 date1 较早,则两

4、个日期之间的期间结果为正值;若 date2 较早, 则结果为负值。 FW :设定每周第一天为星期几, 若未设定表示为星期天。 FW 的设定值如下: 0 使用 API 的设定值。 1 星期天 2 星期一 3 星期二 4 星期三 5 星期四 6 星期五 7 星期六 FY :设定一年的第一周, 若未设定则表示一月一日那一周为一年的第一周。 FY 的设定值如下: 0 使用 API 的设定值。 1 一月一日那一周为一年的第一周 2 至少包括四天的第一周为一年的第一周 3 包括七天的第一周为一年的第一周 例子: DateDiff (d,25-Mar-99 ,30-Jun-99 ) 结果: 97 说明:显示

5、两个日期之间的期间为 97 天 想查询2007年2月9日的付款流水有单笔交易出现多张小票号的情况的小票号 这个要看一下你的表结构是什么样的啊?回答者:qqsmalltiger - 助理 二级 3-3 23:45评价已经被关闭 目前有 0 个人评价 好50% (0) 不好50% (0) 其他回答 共 1 条DATEADD 在向指定日期加上一段时间的基础上,返回新的 datetime 值。 语法 DATEADD ( datepart , number, date ) DATEDIFF 返回跨两个指定日期的日期和时间边界数。 语法 DATEDIFF ( datepart , startdate ,

6、enddate ) GETDATE 按 datetime 值的 Microsoft SQL Server 标准内部格式返回当前系统日期和时间。 语法 GETDATE ( ) DATENAME 返回代表指定日期的指定日期部分的字符串。 语法 DATENAME ( datepart , date )SQL日期计算 通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天。你们大部分人大概都知道怎样把日期进行分割(年、月、日等),然后仅仅用分割出来的年、月、日等放在几个函数中计算出自己所需要的日期!在这篇文章里,我将告诉你如何使用DATEADD和DATEDI

7、FF函数来计算出在你的程序中可能你要用到的一些不同日期。 在使用本文中的例子之前,你必须注意以下的问题。大部分可能不是所有例子在不同的机器上执行的结果可能不一样,这完全由哪一天是一个星期的第一天这个设置决定。第一天(DATEFIRST)设定决定了你的系统使用哪一天作为一周的第一天。所有以下的例子都是以星期天作为一周的第一天来建立,也就是第一天设置为7。假如你的第一天设置不一样,你可能需要调整这些例子,使它和不同的第一天设置相符合。你可以通过DATEFIRST函数来检查第一天设置。 为了理解这些例子,我们先复习一下DATEDIFF和DATEADD函数。DATEDIFF函数计算两个日期之间的小时、

8、天、周、月、年等时间间隔总数。DATEADD函数计算一个日期通过给时间间隔加减来获得一个新的日期。要了解更多的DATEDIFF和DATEADD函数以及时间间隔可以阅读微软联机帮助。 使用DATEDIFF和DATEADD函数来计算日期,和本来从当前日期转换到你需要的日期的考虑方法有点不同。你必须从时间间隔这个方面来考虑。比如,从当前日期到你要得到的日期之间有多少时间间隔,或者,从今天到某一天(比如1900-1-1)之间有多少时间间隔,等等。理解怎样着眼于时间间隔有助于你轻松的理解我的不同的日期计算例子。 一个月的第一天 第一个例子,我将告诉你如何从当前日期去这个月的最后一天。请注意:这个例子以及

9、这篇文章中的其他例子都将只使用DATEDIFF和DATEADD函数来计算我们想要的日期。每一个例子都将通过计算但前的时间间隔,然后进行加减来得到想要计算的日期。 这是计算一个月第一天的SQL 脚本: SELECT DATEADD(mm, DATEDIFF(mm,0,getdate(), 0) 我们把这个语句分开来看看它是如何工作的。最核心的函数是getdate(),大部分人都知道这个是返回当前的日期和时间的函数。下一个执行的函数DATEDIFF(mm,0,getdate()是计算当前日期和“1900-01-01 00:00:00.000”这个日期之间的月数。记住:时期和时间变量和毫秒一样是从“

10、1900-01-01 00:00:00.000”开始计算的。这就是为什么你可以在DATEDIFF函数中指定第一个时间表达式为“0”。下一个函数是DATEADD,增加当前日期到“1900-01-01”的月数。通过增加预定义的日期“1900-01-01”和当前日期的月数,我们可以获得这个月的第一天。另外,计算出来的日期的时间部分将会是“00:00:00.000”。 这个计算的技巧是先计算当前日期到“1900-01-01”的时间间隔数,然后把它加到“1900-01-01”上来获得特殊的日期,这个技巧可以用来计算很多不同的日期。下一个例子也是用这个技巧从当前日期来产生不同的日期。本周的星期一 这里我是

11、用周(wk)的时间间隔来计算哪一天是本周的星期一。 SELECT DATEADD(wk, DATEDIFF(wk,0,getdate(), 0) 一年的第一天 现在用年(yy)的时间间隔来显示这一年的第一天。 SELECT DATEADD(yy, DATEDIFF(yy,0,getdate(), 0) 季度的第一天 假如你要计算这个季度的第一天,这个例子告诉你该如何做。 SELECT DATEADD(qq, DATEDIFF(qq,0,getdate(), 0) 当天的半夜 曾经需要通过getdate()函数为了返回时间值截掉时间部分,就会考虑到当前日期是不是在半夜。假如这样,这个例子使用DA

12、TEDIFF和DATEADD函数来获得半夜的时间点。 SELECT DATEADD(dd, DATEDIFF(dd,0,getdate(), 0) 深入DATEDIFF和DATEADD函数计算 你可以明白,通过使用简单的DATEDIFF和DATEADD函数计算,你可以发现很多不同的可能有意义的日期。 目前为止的所有例子只是仅仅计算当前的时间和“1900-01-01”之间的时间间隔数量,然后把它加到“1900-01-01”的时间间隔上来计算出日期。假定你修改时间间隔的数量,或者使用不同的时间间隔来调用DATEADD函数,或者减去时间间隔而不是增加,那么通过这些小的调整你可以发现和多不同的日期。

13、这里有四个例子使用另外一个DATEADD函数来计算最后一天来分别替换DATEADD函数前后两个时间间隔。 上个月的最后一天 这是一个计算上个月最后一天的例子。它通过从一个月的最后一天这个例子上减去3毫秒来获得。有一点要记住,在Sql Server中时间是精确到3毫秒。这就是为什么我需要减去3毫秒来获得我要的日期和时间。 SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate(), 0) 计算出来的日期的时间部分包含了一个Sql Server可以记录的一天的最后时刻(“23:59:59:997”)的时间。 去年的最后一天 连接上面的例子,为了

14、要得到去年的最后一天,你需要在今年的第一天上减去3毫秒。 SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate(), 0) 本月的最后一天 现在,为了获得本月的最后一天,我需要稍微修改一下获得上个月的最后一天的语句。修改需要给用DATEDIFF比较当前日期和“1900-01-01”返回的时间间隔上加1。通过加1个月,我计算出下个月的第一天,然后减去3毫秒,这样就计算出了这个月的最后一天。这是计算本月最后一天的SQL脚本。 SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate()+1,

15、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()”部分替换成计算本月的第

16、6天,在计算中用本月的第6天来替换当前日期使得计算可以获得这个月的第一个星期一。 总结 我希望这些例子可以在你用DATEADD和DATEDIFF函数计算日期时给你一点启发。通过使用这个计算日期的时间间隔的数学方法,我发现为了显示两个日期之间间隔的有用历法是有价值的。注意,这只是计算出这些日期的一种方法。要牢记,还有很多方法可以得到相同的计算结果。假如你有其他的方法,那很不错,要是你没有,我希望这些例子可以给你一些启发,当你要用DATEADD和DATEDIFF函数计算你程序可能要用到的日期时。 - 附录,其他日期处理方法 1)去掉时分秒 declare datetime set = getdat

17、e() -2003-7-1 10:00:00 SELECT ,DATEADD(day, DATEDIFF(day,0,), 0) 2)显示星期几 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(mo

18、nth(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) wh

19、en 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 the

20、n 4 when m between 7 and 9 then 7 sql日期操作 dump transaction 数据库 with no_logselect datename(weekday,getdate() 获取当天的星期数select convert(char(10),getdate(),21)cast(Today+ +DutyTime_1 as datetime) 字符串组合产生时间类型if exists(select 1 from master.sysdatabases where name=example) 判断是否有记录存在cast( ltrim(str(thisyear,4

21、)+-+ltrim(str(thismonth,2)+-+21 00:00:00 as datetime) 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, DAT

22、EDIFF(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

23、, 0)10.本月的第一个星期一select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate(),getdate(), 0) 返回当前日期和时间通过函数GETDATE(),你可以获得当前的日期和时间。函数GETDATE()可以用来作为DATEDIME型字段的缺省值。这对插入记录时保存当时的时间是有用的。要建立一个表,其中的记录包含有当前的日期和时间,可以添加一个DATETIME型字段,指定其缺省值为函数GETDATE()的返回值,就象这样:Create TABLE site_log (username VARCHAR(40

24、),useractivity VARCHAR(100),entrydate DATETIME DEFAULT GETDATE()转换日期和时间函数GETDATE()的返回值在显示时只显示到秒。实际上,SQL Sever内部时间可以精确到毫秒级(确切地说,可以精确到3.33毫秒)。要得到不同格式的日期和时间,你需要使用函数CONVERT()。例如,当下面的这个语句执行时,显示的时间将包括毫秒:Select CONVERT(VARCHAR(30),GETDATE(),9)注意例子中数字9的使用。这个数字指明了在显示日期和时间时使用哪种日期和时间格式。当这个语句执行时,将显示如下的日期和时间:Nov

25、 30 1997 3:29:55:170AM(1 row(s) affected)在函数CONVERT()中你可以使用许多种不同风格的日期和时间格式。下表显示了所有的格式。日期和时间的类型:类型值 标准 输出0 Default mon dd yyyy hh:miAM1 USA mm/dd/yy2 ANSI yy.mm.dd3 British/French dd/mm/yy4 German dd.mm.yy5 Italian dd-mm-yy6 - dd mon yy7 - mon dd,yy8 - hh:mi:ss9 Default + milliseconds-mon dd yyyyhh:m

26、i:ss:mmmAM(or )10 USA mm-dd-yy11 JAPAN yy/mm/dd12 ISO yymmdd13 Europe Default + milliseconds-dd mon yyyyhh:mi:ss:mmm(24h)14 - hh:mi:ss:mmm(24h)类型0,9,和13总是返回四位的年。对其它类型,要显示世纪,把style值加上100。类型13和14返回24小时时钟的时间。类型0,7,和13返回的月份用三位字符表示(用Nov代表November).对表中所列的每一种格式,你可以把类型值加上100来显示有世纪的年(例如,00年将显示为2000年)。例如,要按日本

27、标准显示日期,包括世纪,你应使用如下的语句:Select CONVERT(VARCHAR(30),GETDATE(),111)在这个例子中,函数CONVERT()把日期格式进行转换,显示为1997/11/30抽取日期和时间在许多情况下,你也许只想得到日期和时间的一部分,而不是完整的日期和时间。为了抽取日期的特定部分,你可以使用函数DATEPART(),象这样:Select site_name Site Name,DATEPART(mm,site_entrydate) Month Posted FROM site_directory函数DATEPART()的参数是两个变量。第一个变量指定要抽取日

28、期的哪一部分;第二个变量是实际的数据。在这个例子中,函数DATEPART()抽取月份,因为mm代表月份。下面是这个Select 语句的输出结果:Site Name Month PostedYahoo 2Microsoft 5Magicw3 5(3 row(s) affected)Month Posted列显示了每个站点被查询的月份。函数DATEPART()的返回值是一个整数。你可以用这个函数抽取日期的各个不同部分,如下表所示。日期的各部分及其简写日期部分 简写 值year yy 1753-9999quarter qq 1-4month mm 1-12day of year dy 1-366da

29、y dd 1-31week wk 1-53weekday dw 1-7(Sunday-Saturday)hour hh 0-23minute mi 0-59second ss 0-59milisecond ms 0-999当你需要进行日期和时间的比较时,使用函数DATEPART()返回整数是有用的。但是,上例中的查询结果(2,5)不是十分易读。要以更易读的格式得到部分的日期和时间,你可以使用函数DATENAME(),如下例所示:Select site_name Site NameDATENAME(mm,site_entrydate) Month PostedFROM site_directory函数DATENAME()和函数DATEPART()接收同样的参数。但是,它的返回

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2