- 浏览: 309284 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
lzz3717845:
有道理,受教了~谢谢
关于SQL中自动增长列值回复(还原)的问题 -
桃汁天天:
ExtJs中如何动态设置其选中状态!! -
sangumaolv2:
你TM在说什么啊。。。。
关于SQL中自动增长列值回复(还原)的问题 -
duyupeng:
你好,我最近也是在使用这个控件,只是用了_id、_parent ...
ExtJs 中的TreeGrid(Ext.ux.maximgb.tg.EditorGridPanel详解与其他问题解决办法) -
wokao_wg:
大伙可以看看作者说的http://www.sencha.com ...
ExtJs 中的TreeGrid(Ext.ux.maximgb.tg.EditorGridPanel详解与其他问题解决办法)2
DATEADD(datepart,number,date)
date 参数是合法的日期表达式。number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。
datepart 参数可以是下列的值:
datepart 缩写
年 yy, yyyy
季度 qq, q
月 mm, m
年中的日 dy, y
日 dd, d
周 wk, ww
星期 dw, w
小时 hh
分钟 mi, n
秒 ss, s
毫秒 ms
微妙 mcs
纳秒 ns
固定日期减一个月(日、年)
dateadd(表达式1,表达式2,表达式3)
表达式1为MM或YY或DD
表达式2为1
表达式3为要减的日期
一个月的第一天
第一个例子,我将告诉你如何从当前日期去这个月的最后一天。请注意:这个例子以及这篇文章中的其他例子都将只使用DATEDIFF和DATEADD函数来计算我们想要的日期。每一个例子都将通过计算但前的时间间隔,然后进行加减来得到想要计算的日期。
这是计算一个月第一天的SQL 脚本:
Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
我们把这个语句分开来看看它是如何工作的。最核心的函数是getdate(),大部分人都知道这个是返回当前的日期和时间的函数。下一个执行的函数 DATEDIFF(mm,0,getdate())是计算当前日期和“1900-01-01 00:00:00.000”这个日期之间的月数。记住:时期 和时间变量和毫秒一样是从“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”上来获得特殊的日期,这个技巧可以用来计算很多不同的日期。下一个例子也是用这个技巧从当前日期来产生不同的日期。
本周的星期一
这里我是用周(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()函数为了返回时间值截掉时间部分,就会考虑到当前日期是不是在半夜。假如这样,这个例子使用DATEDIFF和DATEADD函数来获得半夜的时间点。
Select DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)
深入DATEDIFF和DATEADD函数计算
你可以明白,通过使用简单的DATEDIFF和DATEADD函数计算,你可以发现很多不同的可能有意义的日期。
目前为止的所有例子只是仅仅计算当前的时间和“1900-01-01”之间的时间间隔数量,然后把它加到“1900-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”)的时间。
去年的最后一天
连接上面的例子,为了要得到去年的最后一天,你需要在今年的第一天上减去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, 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函数计算你程序可能要用到的日期时。
---------------------------------------------------------------
附录,其他日期处理方法
1)去掉时分秒
declare @ datetime
set @ = getdate() --'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(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))
----------------------------------------------------------------------------------------------------------------------------
定义和用法
DATEADD() 函数在日期中添加或减去指定的时间间隔。
语法
DATEADD(datepart,number,date)
date 参数是合法的日期表达式。number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。
datepart 参数可以是下列的值:
datepart 缩写
年 yy, yyyy
季度 qq, q
月 mm, m
年中的日 dy, y
日 dd, d
周 wk, ww
星期 dw, w
小时 hh
分钟 mi, n
秒 ss, s
毫秒 ms
微妙 mcs
纳秒 ns
可以使用 DateAdd 函数对日期加上或减去指定的时间间隔。例如,可以用 DateAdd 来计算距今天为三十天的日期;或者计算距现在为 45 分钟的时间。
为了对 date 加上“日”,可以使用“一年的日数” (“y”),“日” (”d”) 或“一周的日数” (”w”)。
DateAdd 函数将不返回有效日期。在以下实例中将 1 月31 日加上一个月:
DateAdd(m, 1, 31-Jan-95)
上例中,DateAdd 返回 1995 年 2 月 28 日,而不是 1995 年 2 月 31 日。如果 date 是 1996 年 1 月 31 日,则由于 1996 年是闰年,返回值是 1996 年 2 月 29 日。
如果计算的日期超前 100 年(减去的年度超过 date 中的年份),就会导致错误发生。
如果 number 不是一个 Long 值,则在计算时取最接近的整数值来计算。
注意 DateAdd 返回值的格式由 Control Panel设置决定,而不是由传递到date 参数的格式决定。
--------------------------------------------------------------------------------------------------------------------------------
DateDiff函数 是一个非常有用的函数,它可以为一些网页做一些特殊的效果.
我就曾用到它和一张'new'字样的图片 来区别网页显示的信息是否为最近的信息.
例如:提示最近的通知,最近的新闻等等.
下面从DateDiff函数的定义来看看:
DateDiff函数返回 Variant (Long) 的值,表示两个指定日期间的时间间隔数目。
语法
DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])
DateDiff 函数语法中有下列命名参数:
部分 描述
interval 必要。字符串表达式,表示用来计算date1 和 date2 的时间差的时间间隔
Date1□date2 必要;Variant (Date)。计算中要用到的两个日期。
Firstdayofweek 可选。指定一个星期的第一天的常数。如果未予指定,则以星期日为第一天。
firstweekofyear 可选。指定一年的第一周的常数。如果未予指定,则以包含 1 月 1 日的星期为第一周。
设置
interval 参数的设定值如下:
设置 描述
yyyy 年
q 季
m 月
y 一年的日数
d 日
w 一周的日数
ww 周
h 时
n 分钟
s 秒
firstdayofweek 参数的设定值如下:
常数 值 描述
vbUseSystem 0 使用 NLS API 设置。
vbSunday 1 星期日(缺省值)
vbMonday 2 星期一
vbTuesday 3 星期二
vbWednesday 4 星期三
vbThursday 5 星期四
vbFriday 6 星期五
vbSaturday 7 星期六
常数 值 描述
vbUseSystem 0 用 NLS API 设置。
vbFirstJan1 1 从包含 1 月 1 日的星期开始(缺省值)。
vbFirstFourDays 2 从第一个其大半个星期在新的一年的一周开始。
vbFirstFullWeek 3 从第一个无跨年度的星期开始。
说明
DateDiff 函数可用来决定两个日期之间所指定的时间间隔数目。例如,可以使用 DateDiff 来计算两个日期之间相隔几日,或计算从今天起到年底还有多少个星期。
为了计算 date1 与 date2 相差的日数,可以使用“一年的日数”(y) 或“日”(d)。当 interval 是“一周的日数”(w)
时,DateDiff 返回两日期间的周数。如果 date1 是星期一,DateDiff 计算到 date2 为止的星期一的个数。这个数包含
date2 但不包含 date1。不过,如果 interval 是“周”(ww),则 DateDiff 函数返回两日期间的“日历周”数。由计算
date1 与 date2 之间星期日的个数而得。如果 date2 刚好是星期日,则 date2 也会被加进 DateDiff
的计数结果中;但不论 date1 是否为星期日,都不将它算进去。
如果 date1 比 date2 来得晚,则 DateDiff 函数的返回值为负数。
firstdayofweek 参数会影响使用时间间隔符号 “W” 或 “WW” 计算的结果。
如果 date1 或 date2 是日期文字,则指定的年份成为该日期的固定部分。但是,如果 date1 或 date2 用双引号 (" ")
括起来,且年份略而不提,则在每次计算表达式 date1 或 date2 时,当前年份都会插入到代码之中。这样就可以书写适用于不同年份的程序代码。
在计算 12 月 31 日和来年的 1 月 1 日的年份差时,DateDiff 返回 1 表示相差一个年份,虽然实际上只相差一天而已。
发表评论
-
PowerDesigner连接数据库导出ER图
2012-06-28 18:16 3139PowerDesigner建立与数据库的连接,以便生成数 ... -
各类数据库中的SQL Profiler
2012-01-12 15:52 2025SQL Profiling and ... -
表变量与临时表
2011-12-27 09:51 918SQL Server中的临时表和表变量 ... -
sqlserver的换行问题
2011-09-20 20:29 1955制表符: CHAR(9) 换行符: CHAR(10) ... -
PowerShell 數據庫備份與還原(帶替換)
2011-07-19 18:44 1520同一目錄下config.xml: <?xml v ... -
SQLServer脚本一键备份与还原(可配置文件及多通配符支持...)
2011-05-31 17:22 3080需求: 需要数据库中的对象(eg: Table 、 T ... -
在SQL Server中将数据库表结构及全部数据导成脚本
2011-05-20 15:24 1977当我们想将数据库搬到另一个环境中运行时,如 ... -
SMO+PowerShell 实现SQLServer数据库的备份与还原
2011-05-17 21:31 3473最近有需求,需要用脚 ... -
一个表写给另一个表的情书!
2011-02-09 22:01 1170亲爱的Mrs TableMM: ... -
SQL Server datetime 常用日期格式转换
2010-12-20 20:59 1474我们经常出于某种目的需要使用各种各样的日期格式,当然我们可以使 ... -
SQL Server 2005启用sa账号
2010-11-11 09:35 1287... -
PIVOT初接触
2010-10-28 20:33 1077以前一直没接触过PIVOT这个概念!当接触时,赶紧查了下资料如 ... -
常用函数
2010-10-28 15:40 957SQL函数 left()、charindex()的使用 ... -
关于SQL中自动增长列值回复(还原)的问题
2010-10-23 14:13 4398大家都知道,只要有新加记录,SQL中自动增长字段的值总是自动 ... -
数据库中涉及到的几种连接方式
2010-10-14 19:43 1245通俗的讲: A left join B ...
相关推荐
DATEADD 和 DATEDIFF 函数是 SQL 中两个非常重要的函数,它们可以帮助我们计算和处理日期相关的问题。在本文中,我们将详细介绍 DATEADD 和 DATEDIFF 函数的用法,包括它们的定义、语法、参数、返回值、使用示例等...
在SQL中,DATEADD和DATEDIFF是两个非常重要的日期时间函数,它们可以帮助开发者处理复杂的日期时间计算。DATEADD函数用于在指定的日期时间上增加或减少一个时间间隔,而DATEDIFF函数则计算两个日期时间之间的间隔数...
在SQL Server中,设置日期型字段的默认值可以通过多种方式实现,其中最常用的是使用`GETDATE()`函数和`DATEADD()`函数。下面将详细介绍这两种方法: #### 使用`GETDATE()`函数 `GETDATE()`函数返回系统当前的日期...
本文将深入探讨如何在SQL中查询一个月的第一天,并详细解释与之相关的日期函数,如`DATEDIFF`和`DATEADD`,这些函数在处理日期时间数据时极为关键。 ### 查询一个月的第一天 要查询当前月的第一天,可以使用`...
SQL日期函数是数据库管理系统中用于处理日期和时间的函数,以下是SQL日期函数大全,涵盖了几乎所有的时间操作函数,并提供了详细的例子和执行结果分析。 1. 获取当前系统日期和时间 使用 `GETDATE()` 函数可以获取...
在SQL Server数据库管理系统中,`DATEADD()` 和 `DATEDIFF()` 是两个非常重要的日期和时间操作函数。在PHP中,由于没有内置与之完全相同的函数,我们可以模拟这些函数的功能来实现相似的操作。以下是对这两个函数的...
通过以上SQL语句的介绍,我们可以看出,在SQL Server中利用`DATEADD`和`DATEDIFF`函数可以灵活地处理各种日期计算需求,这对于优化数据查询性能、提高数据分析效率具有重要意义。掌握了这些技巧,便能更高效地应对...
在SQL中,`DATEDIFF()`函数用于计算两个日期之间的差值,`DATEADD()`函数则用于在日期上增加或减少指定的时间间隔。下面的脚本展示了获取当前月第一天的方法: ```sql SELECT DATEADD(mm, DATEDIFF(mm, 0, GETDATE...
在SQL语言中,查询特定时间范围的起始日或结束日是常见的需求,尤其是在处理周、月、年的数据聚合分析时。以下是对“SQL语句查询周月年季的最后或第一天”这一主题的深入解析,包括理解日期函数、如何构建SQL语句...
本篇我们将深入探讨如何在SQL语句中使用`DATEADD`函数来向指定日期添加一段时间间隔,这对于更新、查询和分析日期相关的数据至关重要。 `DATEADD`函数在SQL Server中是一个非常实用的时间日期操作函数,它允许我们...
本文将围绕如何在SQL Server环境中有效地处理与日期相关的计算问题展开,具体包括如何使用`DATEADD`、`DATEDIFF`等函数来实现不同日期单位的加减操作以及两日期之间的差值计算。 #### DATEADD 和 DATEDIFF 的基本...
在SQL Server数据库中,日期函数是进行日期处理与计算的重要工具之一。本文将详细介绍SQL Server中的几个常用日期函数及其应用场景,帮助开发者更好地理解和使用这些函数来解决实际问题。 #### 1. 获取当前日期 ```...
SQL Server 中提供了多种日期函数,包括 GETDATE()、DATEPART()、DATEDIFF()、DATEADD() 等。 1. GETDATE(): GETDATE() 函数用于获取当前日期和时间。例如: ```sql SELECT GETDATE() ``` 该语句将返回当前日期和...
函数方面,T-SQL提供了一些特有的函数,如DATEPART、DATEADD和DATEDIFF,这些函数方便地处理日期和时间。而在标准SQL中,这些功能可能需要通过更复杂的表达式来实现。另外,T-SQL的聚合函数,如SUM、AVG等,可以与...
在SQL Server中,日期操作是数据库管理中常见且重要的任务之一...理解并熟练掌握DATEDIFF和DATEADD的用法对于处理SQL Server中的日期数据至关重要,无论是进行数据分析、报表生成还是业务逻辑实现,都能发挥重要作用。
在SQL中,日期函数是非常重要的组成部分之一,它们可以帮助我们处理与日期时间相关的各种操作,比如获取当前日期、计算日期差、添加或减去指定的时间间隔等。下面将详细介绍几个常见的SQL日期函数及其应用示例。 ##...
本篇文章将深入探讨Delphi中的日期函数以及SQL(特别是MSSQL)中的日期时间函数,帮助开发者更好地理解和使用这些功能。 首先,让我们关注Delphi的日期函数。Delphi是一个强大的Object Pascal开发环境,它提供了一...
在SQL中,日期函数是...总之,SQL中的日期函数如`DatePart`、`DATEDIFF`和`DATEADD`提供了强大的工具来处理和分析涉及日期和时间的数据,对于任何进行数据分析或数据处理的SQL开发者来说,掌握这些函数是非常重要的。