`
chengyue2007
  • 浏览: 1489039 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

sql 时间函数

阅读更多

--日期转换参数,值得收藏

select CONVERT(varchar, getdate(), 120 )2004-09-12 11:06:08

select CONVERT(varchar(11), getdate(), 120 )2004-09-12

select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')20040912110608

select CONVERT(varchar(12) , getdate(), 111 )2004/09/12

select CONVERT(varchar(12) , getdate(), 112 )20040912

select CONVERT(varchar(12) , getdate(), 102 )2004.09.12

其它不常用的日期格式转换方法:

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

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

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

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

select CONVERT(varchar(12) , getdate(), 106 )12 09 2004

select CONVERT(varchar(12) , getdate(), 107 )09 12, 2004

select CONVERT(varchar(12) , getdate(), 108 )11:06:08

select CONVERT(varchar(12) , getdate(), 109 )09 12 2004 1

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

select CONVERT(varchar(12) , getdate(), 113 )12 09 2004 1

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

1. 当前系统日期、时间
select getdate()
2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值
例如:向日期加上2天
select dateadd(day,2,'2004-10-15') --返回:2004-10-17 00:00:00.000

3. datediff 返回跨两个指定日期的日期和时间边界数。
select datediff(day,'2004-09-01','2004-09-18') --返回:17

4. datepart 返回代表指定日期的指定日期部分的整数。
SELECT DATEPART(month, '2004-10-15') --返回 10

5. datename 返回代表指定日期的指定日期部分的字符串
SELECT datename(weekday, '2004-10-15') --返回:星期五

6. day(), month(),year() --可以与datepart对照一下

select 当前日期=convert(varchar(10),getdate(),120)
,当前时间=convert(varchar(8),getdate(),114)

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

select 本年第多少周=datename(week,'2004-10-15')
,今天是周几=datename(weekday,'2004-10-15')

函数 参数/功能
GetDate( ) 返回系统目前的日期与时间
DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 与date1两个日期之间的差值
date2-date1
DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期
DatePart (interval,date) 返回日期date中,interval指定部分所对应的整数值
DateName (interval,date) 返回日期date中,interval指定部分所对应的字符串名称

参数 interval的设定值如下:

值 缩 写(Sql Server) Access 和 ASP 说明
Year Yy yyyy 年 1753 ~ 9999
Quarter Qq q 季 1 ~ 4
Month Mm m 月1 ~ 12
Day of year Dy y 一年的日数,一年中的第几日 1-366
Day Dd d 日,1-31
Weekday Dw w 一周的日数,一周中的第几日 1-7
Week Wk ww 周,一年中的第几周 0 ~ 51
Hour Hh h 时0 ~ 23
Minute Mi n 分钟0 ~ 59
Second Ss s 秒 0 ~ 59
Millisecond Ms - 毫秒 0 ~ 999

access 和 asp 中用date()和now()取得系统日期时间;其中DateDiff,DateAdd,DatePart也同是能用于
Access和asp中,这些函数的用法也类似

举例:
1.GetDate() 用于sql server :select GetDate()

2.DateDiff('s','2005-07-20','2005-7-25 22:56:32')返回值为 514592 秒
DateDiff('d','2005-07-20','2005-7-25 22:56:32')返回值为 5 天

3.DatePart('w','2005-7-25 22:56:32')返回值为 2 即星期一(周日为1,周六为7)
DatePart('d','2005-7-25 22:56:32')返回值为 25即25号
DatePart('y','2005-7-25 22:56:32')返回值为 206即这一年中第206天
DatePart('yyyy','2005-7-25 22:56:32')返回值为 2005即2005年

SQL Server DATEPART() 函数返回 SQLServer datetime 字段的一部分。

SQL Server DATEPART() 函数的语法是:
DATEPART(portion, datetime)
其中 datetime 是 SQLServer datetime 字段和部分的名称是下列之一: Ms for Milliseconds
Yy for Year
Qq for Quarter of the Year
Mm for Month
Dy for the Day of the Year
Dd for Day of the Month
Wk for Week
Dw for the Day of the Week
Hh for Hour
Mi for Minute
Ss for Second

详细的说明:

通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最
后一天。你们大部分人大概都知道怎样把日期进行分割(年、月、日等),然后仅仅用分割出来的年、月
、日等放在几个函数中计算出自己所需要的日期!在这篇文章里,我将告诉你如何使用DATEADD和
DATEDIFF函数来计算出在你的程序中可能你要用到的一些不同日期。
在使用本文中的例子之前,你必须注意以下的问题。大部分可能不是所有例子在不同的机器上执行的结果
可能不一样,这完全由哪一天是一个星期的第一天这个设置决定。第一天(DATEFIRST)设定决定了你的
系统使用哪一天作为一周的第一天。所有以下的例子都是以星期天作为一周的第一天来建立,也就是第一
天设置为7。假如你的第一天设置不一样,你可能需要调整这些例子,使它和不同的第一天设置相符合。
你可以通过@@DATEFIRST函数来检查第一天设置。

为了理解这些例子,我们先复习一下DATEDIFF和DATEADD函数。DATEDIFF函数计算两个日期之间的小时、
天、周、月、年等时间间隔总数。DATEADD函数计算一个日期通过给时间间隔加减来获得一个新的日期。
要了解更多的DATEDIFF和DATEADD函数以及时间间隔可以阅读微软联机帮助。

使用DATEDIFF和DATEADD函数来计算日期,和本来从当前日期转换到你需要的日期的考虑方法有点不同。
你必须从时间间隔这个方面来考虑。比如,从当前日期到你要得到的日期之间有多少时间间隔,或者,从
今天到某一天(比如1900-1-1)之间有多少时间间隔,等等。理解怎样着眼于时间间隔有助于你轻松的理
解我的不同的日期计算例子。

一个月的第一天

第一个例子,我将告诉你如何从当前日期去这个月的最后一天。请注意:这个例子以及这篇文章中的其他
例子都将只使用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)

Oracle计算时间差表达式

--获取两时间的相差豪秒数

select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60 * 60 * 1000) 相差豪秒数 FROM DUAL;

/*

相差豪秒数

----------

  86401000

1 row selected

*/

--获取两时间的相差秒数

select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60 * 60) 相差秒数 FROM DUAL;

/*

相差秒数

----------

     86401

1 row selected

*/

--获取两时间的相差分钟数

select ceil(((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss'))) * 24 * 60)  相差分钟数 FROM DUAL;

/*

相差分钟数

----------

      1441

1 row selected

*/

--获取两时间的相差小时数

select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24)  相差小时数 FROM DUAL;

/*

相差小时数

----------

        25

1 row selected

*/

--获取两时间的相差天数

select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')))  相差天数 FROM DUAL;

/*

相差天数

----------

         2

1 row selected

*/

--获取两时间月份差

select (EXTRACT(year FROM to_date('2009-05-01','yyyy-mm-dd')) - EXTRACT(year FROM to_date('2008-04-30','yyyy-mm-dd'))) * 12 +

       EXTRACT(month FROM to_date('2008-05-01','yyyy-mm-dd')) - EXTRACT(month FROM to_date('2008-04-30','yyyy-mm-dd')) months

from dual;

/*MONTHS---------- 131 row selected*/

--获取两时间年份差

select EXTRACT(year FROM to_date('2009-05-01','yyyy-mm-dd')) - EXTRACT(year FROM to_date('2008-04-30','yyyy-mm-dd')) years from dual;

/*

YEARS

----------

         1

1 row selected

*/

分享到:
评论

相关推荐

    sql时间函数大全

    ### SQL时间函数详解 在开发数据库应用程序的过程中,处理时间数据是一项基本且重要的任务。SQL提供了丰富的内置函数来帮助开发者高效地处理与日期和时间相关的数据。本文将详细讲解SQL中的常用时间函数,并通过...

    sql 时间函数大全

    SQL 时间函数大全 SQL 时间函数大全是 SQL 语言中处理日期和时间的函数,广泛应用于数据分析、报表生成、业务逻辑处理等领域。本文将对 SQL 时间函数进行详细的解释和示例。 1. GetDate() 函数 GetDate() 函数...

    SQL时间函数使用以及函数之间使用方法

    以下是对标题和描述中涉及的一些主要SQL时间函数的详细解释: 1. **GETDATE()**:这是获取当前系统日期和时间的函数,返回一个datetime类型的值。例如,`SELECT GETDATE()`将返回服务器的当前日期和时间。 2. **...

    sql时间函数

    SQL 时间函数大全 SQL 时间函数是 MySQL 中的一组强大的函数,可以对日期和时间进行各种操作,包括获取日期和时间的各个组成部分、对日期和时间进行加减法运算等。本文将详细介绍 MySQL 中的日期时间函数大全。 一...

    Sql时间函数

    Sql 时间函数 Sql Server 中的日期和时间函数是非常重要的概念,它们可以帮助开发者快速高效地处理日期和时间相关的操作。本文将详细介绍 Sql Server 中的日期和时间函数,包括获取当前系统日期和时间、日期加减、...

    sql时间函数大全***

    **************************sql时间函数大全*****************

    delphi、 sql 日期时间函数

    通过阅读"delphi日期函数、日期加减.doc"和"sql时间函数.txt"这两个文档,你可以获得更详细的示例和用法说明,从而更好地掌握这两个领域的日期时间处理技巧。记住,理解并熟练使用这些函数是提升开发效率的关键,...

    T-SQL日期函数应用

    本篇文章将通过创建一个包含10年数据的时间表来详细介绍如何利用T-SQL中的日期函数来完成数据填充工作。 #### 二、需求分析 根据题目要求,我们需要创建一张名为`date`的时间表,并填充从2011年至2021年的每日日期...

    SQL 常用函数- 时间函数

    在SQL Server中,时间函数是数据库管理中不可或缺的一部分,它们用于处理和操作日期和时间数据。日期和时间处理在各种业务场景中极为重要,比如数据分析、报表生成、日志记录等。下面我们将深入探讨SQL Server中的...

    SQL 一些全局变量 时间函数

    以下是一些常见的SQL时间函数: 1. `CURRENT_DATE` 或 `NOW()`:返回当前日期和时间。 2. `DATE()`:从日期或日期/时间值中提取日期部分。 3. `TIME()`:从日期/时间值中提取时间部分。 4. `YEAR()`, `MONTH()`, `...

    sql 时间函数 整理的比较全了

    SQL 时间函数详解 SQL 时间函数是数据库中非常重要的一部分,用于处理日期和时间相关的操作。在这里,我们将详细介绍 SQL 时间函数的使用和应用。 GetDate() GetDate() 函数用于返回系统当前的日期和时间。该函数...

    sqlserver时间函数

    时间函数,sqlserver,标签系统标签系统标签系统标签系统

    sql server 时间函数

    SQL Server 是一款功能强大的数据库管理系统,它提供了丰富的日期与时间函数,用于处理各种与日期和时间相关的数据。本文将深入探讨这些函数,并提供详细的使用示例,帮助读者更好地理解和运用这些函数。 ### 1. ...

    SQL自定义函数的好处

    3. 提高开发效率:自定义函数可以简化开发过程,减少开发时间,提高开发效率。 4. 提高系统的可维护性:自定义函数可以使系统更加易于维护,因为它可以根据用户的需求进行修改和更新。 SQL自定义函数可以分为三种...

    SQL常用函数汇总(比较详细)

    SQL 语言中有多种类型的函数,可以按照不同的分类方式来分类,下面将从函数类别、聚合函数、转换函数、加密函数、游标函数、日期和时间函数、数学函数、元数据函数、排名函数、行集函数、安全函数、字符串函数、系统...

    sqlserver 函数大全

    这些函数可以分为多个类别,包括聚合函数、配置函数、转换函数、加密函数、游标函数、日期和时间函数、数学函数、元数据函数、排名函数、行集函数、安全函数、字符串函数、系统函数、系统统计函数和文本和图像函数。...

    SQLSERVER时间函数汇总

    ### SQL Server 时间函数详解 在 SQL Server 中,处理日期与时间是进行数据分析和报告时的常见需求之一。本文将深入探讨 SQL Server 提供的时间函数,包括 `DATEADD`、`DATEDIFF` 和其他相关函数的使用方法及应用...

Global site tag (gtag.js) - Google Analytics