SQL Server 2008 联机丛书(2008 年 8 月)

DATEDIFF (Transact-SQL)

返回指定的 startdate 和 enddate 之间所跨的指定 datepart 边界的计数(带符号的整数)。

有关所有 Transact-SQL 日期和时间数据类型及函数的概述,请参阅日期和时间数据类型及函数 (Transact-SQL)。 有关日期和时间数据类型及函数共有的信息和示例,请参阅使用日期和时间数据

SQL日期函数 - 张向明 - 张向明 Transact-SQL 语法约定

SQL日期函数 - 张向明 - 张向明 语法

DATEDIFF ( datepart , startdate , enddate )

SQL日期函数 - 张向明 - 张向明 参数

datepart

 

是指定所跨边界类型的 startdate 和 enddate 的一部分。 下表列出了所有有效的 datepart 参数。 用户定义的变量等效项是无效的。

datepart 缩写

 

year

 

yy, yyyy

 

quarter

 

qq, q

 

month

 

mm, m

 

dayofyear

 

dy, y

 

day

 

dd, d

 

week

 

wk, ww

 

hour

 

hh

 

minute

 

mi, n

 

second

 

ss, s

 

millisecond

 

ms

 

microsecond

 

mcs

 

nanosecond

 

ns

startdate

 

是一个表达式,可以解析为 time、date、smalldatetime、datetime、datetime2 或 datetimeoffset 值。date 可以是表达式、列表达式、用户定义的变量或字符串文字。从 enddate 减去 startdate。

为避免不确定性,请使用四位数年份。 有关两位数年份的信息,请参阅two digit year cutoff 选项

enddate

 

请参阅 startdate。

 

SQL日期函数 - 张向明 - 张向明 返回类型

int

SQL日期函数 - 张向明 - 张向明 返回值

  • 每个 datepart 及其缩写都返回相同的值。

 

如果返回值超出 int 的范围(-2,147,483,648 到 +2,147,483,647),则会返回一个错误。 对于 millisecond,startdate 与 enddate 之间的最大差值为 24 天 20 小时 31 分钟 23.647 秒。 对于 second,最大差值为 68 年。

如果为 startdate 和 enddate 都只指定了时间值,并且 datepart 不是时间 datepart,则会返回 0。

在计算返回值时不使用 startdate 或 endate 的时区偏移量部分。

由于 smalldatetime 仅精确到分钟,因此将 smalldatetime 值用作 startdate 或 enddate 时,返回值中的秒和毫秒将始终设置为 0。

如果只为某个日期数据类型的变量指定时间值,则所缺日期部分的值将设置为默认值:1900-01-01。 如果只为某个时间或日期数据类型的变量指定日期值,则所缺时间部分的值将设置为默认值:00:00:00。 如果 startdate 和 enddate 中有一个只含时间部分,另一个只含日期部分,则所缺时间和日期部分将设置为各自的默认值。

如果 startdate 和 enddate 属于不同的日期数据类型,并且其中一个的时间部分或秒的小数部分精度比另一个高,则另一个的所缺部分将设置为 0。

日期部分边界

以下语句具有相同的 startdate 和相同的 endate。 这些日期是相邻的,在时间上相差 .0000001 秒。 每个语句中 startdate 与 endate 之间的差跨其 datepart 的一个日历或时间边界。 每个语句都返回 1。如果本例使用不同的年份且 startdate 和 endate 都在相同的日历周内,则 week 的返回值将为 0。

SELECT DATEDIFF(year, '2005-12-31 23:59:59.9999999'

, '2006-01-01 00:00:00.0000000');

SELECT DATEDIFF(quarter, '2005-12-31 23:59:59.9999999'

, '2006-01-01 00:00:00.0000000');

SELECT DATEDIFF(month, '2005-12-31 23:59:59.9999999'

, '2006-01-01 00:00:00.0000000');

SELECT DATEDIFF(dayofyear, '2005-12-31 23:59:59.9999999'

, '2006-01-01 00:00:00.0000000');

SELECT DATEDIFF(day, '2005-12-31 23:59:59.9999999'

, '2006-01-01 00:00:00.0000000');

SELECT DATEDIFF(week, '2005-12-31 23:59:59.9999999'

, '2006-01-01 00:00:00.0000000');

SELECT DATEDIFF(hour, '2005-12-31 23:59:59.9999999'

, '2006-01-01 00:00:00.0000000');

SELECT DATEDIFF(minute, '2005-12-31 23:59:59.9999999'

, '2006-01-01 00:00:00.0000000');

SELECT DATEDIFF(second, '2005-12-31 23:59:59.9999999'

, '2006-01-01 00:00:00.0000000');

SELECT DATEDIFF(millisecond, '2005-12-31 23:59:59.9999999'

, '2006-01-01 00:00:00.0000000');

SQL日期函数 - 张向明 - 张向明 备注

DATEDIFF 可用在选择列表、WHERE、HAVING、GROUP BY 和 ORDER BY 子句中。

----------------------------------------------------我是大胆的分隔线----------------------------------------------------

Sql Server中的日期与时间函数

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 常用日期格式

发布于:2006-2-24 17:53:25 已被阅读: 158  

SQL Server中文版的默认的日期字段datetime格式是yyyy-mm-dd Thh:mm:ss.mmm

例如:

select getdate()

2004-09-12 11:06:08.177

整理了一下SQL Server里面可能经常会用到的日期格式转换方法:

举例如下:

select CONVERT(varchar, getdate(), 120 )

2004-09-12 11:06:08

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

20040912110608

select CONVERT(varchar(12) , getdate(), 23 )

2004-09-12

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.DateAdd ( I , N , D )

将一个日期加上一段期间后的日期。 I :设定一个日期( Date )所加上的一段期间的单位。譬如 interval="d" 表示 N的单位为日。 I的设定值如下:

yyyy Year 年

q Quarter 季

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

说明:将一个日期 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 较早,则两个日期之间的期间结果为正值;若 >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

说明:显示两个日期之间的期间为 97 天

-------------------------------------------------

二、日期/时间函数(可以工作在Select,FROM,Where之间)

1。ADD_MONTHS:将指定的日期增加一个月。

SQL>Select TASK,STARTDATE,ENDDATE orIGNAL_END,ADD_MONTHS(ENDDATE,2)

          FROM PROJECT;

2。LAST_DAY:可以返回指定月份的最后一天。

SQL>Select ENDDATE,LAST_DAY(ENDDATE) FROM PROJECT;

3。MONTHS_BETWEEN:查询给定2个日期之间有多少个月。

SQL>Select TASK,STARTDATE,ENNDATE,MONTHS_BETWEEN(STARTDATE,ENDDATE) DURATION

           FROM PROJECT;   (返回结果是负值).

   可以利用负值来判断某一日期是否在另一个日期之前,

SQL>Select * FROM PROJECT Where MONTHS_BETWEEN ('19 MAY 95',STARTDATE)>0;

4。NEW_TIME:如果你想把时间调整到你所在的时区,你可以使用NEW_TIME,下边给出了所有时区。

SQL>Select ENDDATE EDT,NEW_TIME (ENDDATE,'EDT','PDT') FROM PROJECT;

5。NEXT_DAY:将返回与指定日期在同一个星期或之后一个星期内的,你所要求的星期天数的确切日期.如果你想知道你所指定的日期的星期五是几号,可以这样:

SQL>Select STARTDATE,NEXT_DAY(STARTDATE,'FRIDAY') FROM PROJECT;

6。SYSDATE:将返回系统的日期和时间。如:

SQL>Select DISTINCT SYSDAY FROM PROJECT;

posted on 2009-11-27 11:38  sweting  阅读(1590)  评论(0编辑  收藏  举报