天天看點

sql操作日期大全

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;