日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

第四十二章 SQL函数 DATEADD

發布時間:2023/12/14 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第四十二章 SQL函数 DATEADD 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 第四十二章 SQL函數 DATEADD
  • 大綱
  • 參數
  • 描述
  • Datepart Argument
  • 日期表達式格式
  • 范圍和值檢查

第四十二章 SQL函數 DATEADD

一個日期/時間函數,它返回一個時間戳,計算方法是在一個日期或時間戳中添加或減去若干日期部件單位(如小時或天)。

大綱

DATEADD(datepart,integer-exp,date-exp)

參數

  • datepart - 日期或時間部分的名稱(或縮寫)。
    可以用大寫或小寫指定該名稱,也可以不加引號。
    可以將datepart指定為文字或主機變量。
  • integer-exp - 任意數字類型的數字表達式。
    該值被截斷為整數(正或負)。
    該值指示將添加到(或從)date-exp中減去的datepart單元的數量。
  • date-exp - 要修改的日期/時間表達式。它可以是日期字符串,也可以是時間戳字符串(%PosiTime或%Timestamp數據類型),也可以是CURRENT_DATE之類的函數。返回的值始終是時間戳,數據類型格式為%PosiTime或%Timestamp。

描述

DATEADD函數通過將指定的日期部分遞增指定的單元數來修改日期/時間表達式。
例如,如果datepart為“month”且整數-exp為5,則DATEADD將date-exp遞增5個月。
還可以通過為integer-exp指定一個負整數來減少日期部分。

計算出的日期將作為完整的日期/時間表達式(時間戳)返回。返回的數據類型取決于Date-EXP的數據類型。如果Date-EXP為%Library.PosiTime(編碼的64位有符號整數),則DATEADD返回數據類型%Library.PosiTime。否則,DATEADD返回數據類型%Library.TimeStamp(yyyy-mm-dd hh:mm:ss.fff)。

DATEADD始終返回有效日期,并考慮一個月的天數,并計算閏年。例如,將1月31日遞增一個月將返回2月28日(該月中的最高有效日期),除非指定的年份是閏年,在這種情況下將返回2月29日。將閏年日期2月29日遞增一年將返回2月28日。將閏年日期2月29日遞增四年返回2月29日。

如果指定包含小數秒的date-exp,則返回值也包括小數秒。如果省略date-exp的時間部分,DATEADD將返回默認時間00:00:00。如果省略date-exp的日期部分,DATEADD將返回默認日期1900-01-01。

DATEADD和TIMESTAMPADD處理季度(3個月間隔);DATEDIFF和TIMESTAMPDIFF不處理季度。

可以使用TIMESTAMPADD ODBC標量函數執行類似的時間/日期修改操作。

也可以使用DATEADD()方法調用從ObjectScript調用此函數:

$SYSTEM.SQL.Functions.DATEADD(datepart,integer-exp,date-exp)

Datepart Argument

日期部分參數可以是以下日期/時間組件之一:全名(日期部分列)或其縮寫(縮寫列)。這些日期部分組件名稱和縮寫不區分大小寫。

Date PartAbbreviationsinteger-exp = 1
yearyyyy, yyIncrements year by 1.
quarterqq, qIncrements month by 3.
monthmm, mIncrements month by 1.
weekwk, wwIncrements day by 7.
weekdaydwIncrements day by 1.
daydd, dIncrements day by 1.
dayofyeardy, yIncrements day by 1.
hourhhIncrements hour by 1.
minutemi, nIncrements minute by 1.
secondss, sIncrements second by 1.
millisecondmsIncrements by .001 of a second.
microsecondmcs0–999999 (with precision of 6)
nanosecondns0–999999999 (with precision of 9)

遞增或遞減日期部分會導致適當修改其他日期部分。例如,午夜過后的小時遞增會自動遞增日期,這又可能會遞增月份,依此類推。

日期部分可以指定為帶引號的字符串或不帶引號。這些語法變體執行的操作略有不同:

  • QUOTES:DATEADD('month',12,$HOROLOG):在創建緩存查詢時,日期部分被視為文字。 SQL執行文字替換。這會產生更普遍可重用的緩存查詢。
  • 無引號:DATEADD(MONTH,12,$HOROLOG):在創建緩存查詢時,日期部分被視為關鍵字。沒有文字替換。這會產生更具體的緩存查詢。

如果將無效的日期部分值指定為文字,則會發出SQLCODE-8錯誤代碼。但是,如果提供無效的日期部件值作為主機變量,則不會發出SQLCODE錯誤,并且DATEPART函數返回值為NULL。

日期表達式格式

Date-exp參數可以采用以下任何格式,并且可以包括或省略小數秒:

  • %Date logical value (+$H)

  • %PosiTime(%Library.PosiTime)邏輯值(編碼的64位有符號整數)

  • (%Library.TimeStamp)邏輯值(YYYY-MM-DD HH:MM:SS)

  • %String(或兼容)值

%STRING(或COMPATIBLE)值可以采用以下任何格式:

  • 99999,99999 ($H format)

  • /SQL-Server-date Sybase/SQL-Server-time

  • Sybase/SQL-Server-time Sybase/SQL-Server-date

  • Sybase/SQL-Server-date (default time is 00:00:00)

  • Sybase/SQL-Server-time (default date is 01/01/1900)

Sybase/SQL-Server-Date是以下五種格式之一:

mmdelimiterdddelimiter[yy]yy dd Mmm[mm][,][yy]yy dd [yy]yy Mmm[mm] yyyy Mmm[mm] dd yyyy [dd] Mmm[mm]

其中,分隔符是斜杠(/)、連字符(-)或句點(.)。

Sybase/SQL-Server-Time表示以下三種格式之一:

HH:MM[:SS:SSS][{AM|PM}] HH:MM[:SS.S] HH['']{AM|PM}

請注意,提供DATEADD是為了與Sybase和Microsoft SQL Server兼容。

范圍和值檢查

DATEADD對輸入值執行以下檢查。如果值未通過檢查,則返回空字符串。

  • 日期字符串必須完整且格式正確,包含適當數量的元素和每個元素的數字,以及適當的分隔符。年份必須指定為四位數。
  • 日期值必須在有效范圍內。年份:0001到9999。月份:1到12天:1到31。時間:0點到23點。分鐘:0到59分鐘。秒:0到59。
  • 返回的遞增的year值必須在0001到9999之間。
    超出此范圍將返回<null>。
  • 一個月中的天數必須與月和年相匹配。
    例如,日期“02-29”僅在指定的年份為閏年時有效。
  • 小于10的日期值可以包括或省略前導零。
    不允許使用其他非規范整數值。
    因此,Day值為“07”或“7”是有效的,但“007”、“7.0”或“7a”無效。

下面的例子為指定的日期添加了1周:

SELECT DATEADD('week',1,'2018-02-26') AS NewDate2018/3/5 0:00:00

它返回2018-03-05 00:00:00,因為增加1周會增加7天。
注意,DATEADD提供了省略的時間部分。

下面的例子為時間戳添加了5個月:

SELECT DATEADD(MM,5,'2017-11-26 12:00:00') AS NewDate2018/4/26 12:00:00

它返回2018-04-26 12:00:00,因為增加5個月也會增加一年。

下面的例子也在時間戳上增加了5個月:

SELECT DATEADD('mm',5,'2018-01-31 12:00:00') AS NewDate2018/6/30 12:00:00

它返回2018-06-30 12:00:00。
這里DATEADD修改了日值和月值,因為簡單地增加月值將導致6月31日,這是一個無效的日期。

下面的例子為時間戳添加了45分鐘:

SELECT DATEADD(MI,45,'2018-02-26 12:00:00') AS NewTime2018/2/26 12:45:00

下面的示例還為時間戳添加了45分鐘,但在本例中,添加的內容增加了日,從而增加了月:

SELECT DATEADD('mi',45,'2018-02-28 23:30:00') AS NewTime2018/3/1 0:15:00

下面的例子將原始時間戳減去45分鐘:

SELECT DATEADD(N,-45,'2018-01-01 00:10:00') AS NewTime2017/12/31 23:25:00

下面的例子為當前日期添加了60天,并根據月份的不同長度進行調整:

SELECT DATEADD(D,60,CURRENT_DATE) AS NewDate2022/4/4 0:00:00

在下面的例子中,第一個DATEADD為指定的日期添加了92天,第二個DATEADD為指定的日期添加了1 / 4天:

SELECT DATEADD('dd',92,'2018-12-20') AS NewDateD,DATEADD('qq',1,'2018-12-20') AS NewDateQ

第一季將于2019-03-22 00:00:00回歸;
第二季將于2019-03-20 00:00:00回歸。
每增加1 / 4,month字段就會增加3,如果需要,還會增加year字段。
它還校正給定月份的最大天數。

上面的例子都使用日期部分的縮寫。
但是,也可以用它的全名來指定日期部分,就像下面的例子一樣:

SELECT DATEADD('day',92,'2018-12-20') AS NewDate2019/3/22 0:00:00

下面的嵌入式SQL示例使用主機變量來執行與前面示例相同的DATEADD操作:

ClassMethod DateAdd() {s x="day"s datein="2019-12-20"&sql(SELECT DATEADD(:x,92,:datein)INTO :dateout)w "in: ",datein,!,"out: ",dateout } DHC-APP>d ##class(PHA.TEST.SQLCommand).DateAdd() in: 2019-12-20 out: 2020-03-21 00:00:00 DHC-APP>

總結

以上是生活随笔為你收集整理的第四十二章 SQL函数 DATEADD的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。