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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

第四十二章 SQL函数 DATEADD

發(fā)布時(shí)間:2023/12/14 数据库 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第四十二章 SQL函数 DATEADD 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

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

第四十二章 SQL函數(shù) DATEADD

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

大綱

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

參數(shù)

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

描述

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

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

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

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

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

可以使用TIMESTAMPADD ODBC標(biāo)量函數(shù)執(zhí)行類似的時(shí)間/日期修改操作。

也可以使用DATEADD()方法調(diào)用從ObjectScript調(diào)用此函數(shù):

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

Datepart Argument

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

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)

遞增或遞減日期部分會(huì)導(dǎo)致適當(dāng)修改其他日期部分。例如,午夜過后的小時(shí)遞增會(huì)自動(dòng)遞增日期,這又可能會(huì)遞增月份,依此類推。

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

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

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

日期表達(dá)式格式

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

  • %Date logical value (+$H)

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

  • (%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]

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

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

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

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

范圍和值檢查

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

  • 日期字符串必須完整且格式正確,包含適當(dāng)數(shù)量的元素和每個(gè)元素的數(shù)字,以及適當(dāng)?shù)姆指舴D攴荼仨氈付樗奈粩?shù)。
  • 日期值必須在有效范圍內(nèi)。年份:0001到9999。月份:1到12天:1到31。時(shí)間:0點(diǎn)到23點(diǎn)。分鐘:0到59分鐘。秒:0到59。
  • 返回的遞增的year值必須在0001到9999之間。
    超出此范圍將返回<null>。
  • 一個(gè)月中的天數(shù)必須與月和年相匹配。
    例如,日期“02-29”僅在指定的年份為閏年時(shí)有效。
  • 小于10的日期值可以包括或省略前導(dǎo)零。
    不允許使用其他非規(guī)范整數(shù)值。
    因此,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,因?yàn)樵黾?周會(huì)增加7天。
注意,DATEADD提供了省略的時(shí)間部分。

下面的例子為時(shí)間戳添加了5個(gè)月:

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

它返回2018-04-26 12:00:00,因?yàn)樵黾?個(gè)月也會(huì)增加一年。

下面的例子也在時(shí)間戳上增加了5個(gè)月:

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

它返回2018-06-30 12:00:00。
這里DATEADD修改了日值和月值,因?yàn)楹唵蔚卦黾釉轮祵?dǎo)致6月31日,這是一個(gè)無效的日期。

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

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

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

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

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

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

下面的例子為當(dāng)前日期添加了60天,并根據(jù)月份的不同長度進(jìn)行調(diào)整:

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

在下面的例子中,第一個(gè)DATEADD為指定的日期添加了92天,第二個(gè)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字段就會(huì)增加3,如果需要,還會(huì)增加year字段。
它還校正給定月份的最大天數(shù)。

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

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

下面的嵌入式SQL示例使用主機(jī)變量來執(zhí)行與前面示例相同的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>

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。