db2數據庫日期減一天_DB2 數據庫中的日期與時間如何正確操作?(2)

日期函數

有時,您需要知道兩個時間戳記之間的時差。為此,DB2 數據庫提供了一個名為 TIMESTAMPDIFF() 的內置函數。但該函數返回的是近似值,因為它不考慮閏年,而且假設每個月只有 30 天。以下示例描述了如何得到兩個日期的近似時差:

timestampdiff?(,?char(

timestamp('2002-11-30-00.00.00')-

timestamp('2002-11-08-00.00.00')))

對于 ,可以使用以下各值來替代,以指出結果的時間單位:

1 = 秒的小數部分

2 = 秒

4 = 分

8 = 時

16 = 天

32 = 周

64 = 月

128 = 季度

256 = 年

當日期很接近時使用 timestampdiff() 比日期相差很大時精確。如果需要進行更精確的計算,可以使用以下方法來確定時差(按秒計):

(DAYS(t1)?-?DAYS(t2))?*?86400?+

(MIDNIGHT_SECONDS(t1)?-?MIDNIGHT_SECONDS(t2))

為方便起見,還可以對上面的方法創建 SQL 用戶定義的函數:

CREATE?FUNCTION?secondsdiff(t1?TIMESTAMP,?t2?TIMESTAMP)

RETURNS?INT

RETURN?(

(DAYS(t1)?-?DAYS(t2))?*?86400?+

(MIDNIGHT_SECONDS(t1)?-?MIDNIGHT_SECONDS(t2))

)

@

如果需要確定給定年份是否是閏年,以下是一個很有用的 SQL 函數,您可以創建它來確定給定年份的天數:

CREATE?FUNCTION?daysinyear(yr?INT)

RETURNS?INT

RETURN?(CASE?(mod(yr,?400))?WHEN?0?THEN?366?ELSE

CASE?(mod(yr,?4))?WHEN?0?THEN

CASE?(mod(yr,?100))?WHEN?0?THEN?365?ELSE?366?END

ELSE?365?END

END)@

最后,以下是一張用于日期操作的內置函數表。它旨在幫助您快速確定可能滿足您要求的函數,但未提供完整的參考。有關這些函數的更多信息,請參考 SQL 參考大全。

SQL 日期和時間函數

DAYNAME 返回一個大小寫混合的字符串,對于參數的日部分,用星期表示這一天的名稱(例如,Friday)。

DAYOFWEEK 返回參數中的星期幾,用范圍在 1-7 的整數值表示,其中 1 代表星期日。

DAYOFWEEK_ISO 返回參數中的星期幾,用范圍在 1-7 的整數值表示,其中 1 代表星期一。

DAYOFYEAR 返回參數中一年中的第幾天,用范圍在 1-366 的整數值表示。

DAYS 返回日期的整數表示。

JULIAN_DAY 返回從公元前 4712 年 1 月 1 日(儒略日歷的開始日期)到參數中指定日期值之間的天數,用整數值表示。

MIDNIGHT_SECONDS 返回午夜和參數中指定的時間值之間的秒數,用范圍在 0 到 86400 之間的整數值表示。

MONTHNAME 對于參數的月部分的月份,返回一個大小寫混合的字符串(例如,January)。

TIMESTAMP_ISO 根據日期、時間或時間戳記參數而返回一個時間戳記值。

TIMESTAMP_FORMAT 從已使用字符模板解釋的字符串返回時間戳記。

TIMESTAMPDIFF 根據兩個時間戳記之間的時差,返回由第一個參數定義的類型表示的估計時差。

TO_CHAR 返回已用字符模板進行格式化的時間戳記的字符表示。TO_CHAR 是 VARCHAR_FORMAT 的同義詞。

TO_DATE 從已使用字符模板解釋過的字符串返回時間戳記。TO_DATE 是 TIMESTAMP_FORMAT 的同義詞。

WEEK 返回參數中一年的第幾周,用范圍在 1-54 的整數值表示。以星期日作為一周的開始。

WEEK_ISO 返回參數中一年的第幾周,用范圍在 1-53 的整數值表示。

改變日期格式

在日期的表示方面,這也是我經常碰到的一個問題。用于日期的缺省格式由數據庫的地區代碼決定,該代碼在數據庫創建的時候被指定。例如,我在創建數據庫時使用 territory=US 來定義地區代碼,則日期的格式就會像下面的樣子:

values?current?date

1

05/30/2003

1?record(s)?selected.

也就是說,日期的格式是 MM/DD/YYYY. 如果想要改變這種格式,你可以通過綁定特定的 DB2 數據庫工具包來實現. 其他被支持的日期格式包括: DEF 使用與地區代碼相匹配的日期和時間格式。

EUR 使用歐洲日期和時間的 IBM 標準格式。

ISO 使用國際標準組織(ISO)制訂的日期和時間格式。

JIS 使用日本工業標準的日期和時間格式。

LOC 使用與數據庫地區代碼相匹配的本地日期和時間格式。

USA 使用美國日期和時間的 IBM 標準格式。

在 Windows 環境下,要將缺省的日期和時間格式轉化成 ISO 格式(YYYY-MM-DD),執行下列操作:

在命令行中,改變當前目錄為 sqllib\bnd。

例如:

在 Windows 環境: c:\program files\IBM\sqllib\bnd

在 UNIX 環境: /home/db2inst1/sqllib/bnd

從操作系統的命令行界面中用具有 SYSADM 權限的用戶連接到數據庫:

db2?connect?to?DBNAME

db2?bind?@db2ubind.lst?datetime?ISO?blocking?all?grant?public

(在你的實際環境中, 用你的數據庫名稱和想使用的日期格式分別來替換 DBNAME and ISO。)

現在,你可以看到你的數據庫已經使用 ISO 作為日期格式了:

values?current?date

1

2003-05-30

1?record(s)?selected.

定制日期/時間格式

在上面的例子中,我們展示了如何將 DB2 數據庫當前的日期格式轉化成系統支持的特定格式。但是,如果你想將當前日期格式轉化成定制的格式(比如‘yyyymmdd’),那又該如何去做呢?按照我的經驗,最好的辦法就是編寫一個自己定制的格式化函數。

下面是這個 UDF 的代碼:

create?function?ts_fmt(TS?timestamp,?fmt?varchar(20))

returns?varchar(50)

return

with?tmp?(dd,mm,yyyy,hh,mi,ss,nnnnnn)?as

(

select

substr(?digits?(day(TS)),9),

substr(?digits?(month(TS)),9)?,

rtrim(char(year(TS)))?,

substr(?digits?(hour(TS)),9),

substr(?digits?(minute(TS)),9),

substr(?digits?(second(TS)),9),

rtrim(char(microsecond(TS)))

from?sysibm.sysdummy1

)

select

case?fmt

when?'yyyymmdd'

then?yyyy?||?mm?||?dd

when?'mm/dd/yyyy'

then?mm?||?'/'?||?dd?||?'/'?||?yyyy

when?'yyyy/dd/mm?hh:mi:ss'

then?yyyy?||?'/'?||?mm?||?'/'?||?dd?||?'?'?||

hh?||?':'?||?mi?||?':'?||?ss

when?'nnnnnn'

then?nnnnnn

else

'date?format?'?||?coalesce(fmt,'?')?||

'?not?recognized.'

end

from?tmp

乍一看,函數的代碼可能顯得很復雜,但是在仔細研究之后,你會發現這段代碼其實非常簡單而且很優雅。最開始,我們使用了一個公共表表達式(CTE)來將一個時間戳記(第一個輸入參數)分別剝離為單獨的時間元素。然后,我們檢查提供的定制格式(第二個輸入參數)并將前面剝離出的元素按照該定制格式的要求加以組合。

這個函數還非常靈活。如果要增加另外一種模式,可以很容易地再添加一個 WHEN 子句來處理。在使用過程中,如果用戶提供的格式不符合任何在 WHEN 子句中定義的任何一種模式時,函數會返回一個錯誤信息。

使用方法示例:

values?ts_fmt(current?timestamp,'yyyymmdd')

'20030818'

values?ts_fmt(current?timestamp,'asa')

'date?format?asa?not?recognized.'

總結

這些示例回答了我在日期和時間方面所遇到的最常見問題。如果讀者的反饋中認為我應該用更多示例來更新本文,那么我會那樣做的。(事實上,我已經對本文更新了三次,不是嗎?我要感謝讀者的反饋。)

致謝

Bill?Wilkins,DB2?Partner?Enablement

Randy?Talsma

免責聲明

本文包含樣本代碼。IBM 授予您(“被許可方”)使用這個樣本代碼的非專有的、版權免費的許可證。然而,樣本代碼是以“按現狀”的基礎提供的,不附有任何形式的(不論是明示的,還是默示的)保證,包括對適銷性、適用于某特定用途或非侵權性的默示保證。IBM 及其許可方不對被許可方使用該軟件所導致的任何損失負責。

任何情況下,無論損失是如何發生的,也不管責任條款怎樣,IBM 或其許可方都不對由使用該軟件或不能使用該軟件所引起的收入的減少、利潤的損失或數據的丟失,或者直接的、間接的、特殊的、由此產生的、附帶的損失或懲罰性的損失賠償負責,即使 IBM 已經被明確告知此類損害的可能性,也是如此。以上的相關內容就是對DB2 基礎之日期和時間的使用的介紹,望你能有所收獲。

【編輯推薦】

【責任編輯:孫巧華 TEL:(010)68476606】

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538702.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538702.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538702.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

win10計算機從桌面消失了,Windows10家庭版程序窗口在桌面上消失了解決方法

相信大家對于電腦非常不陌生吧,當你遇到Win10程序窗口桌面上消失了怎么辦這個問題該怎么解決嗎?不知道了吧,接下來小編就以程序窗口時所遇到的Win10程序窗口桌面上消失了怎么辦問題來給大家講講,看看小編是如何幫大家解決Win10程序…

如何將hive查詢結果導出成txt文件

原文地址:https://zhidao.baidu.com/question/241683835498891364.html ----------------------------------------------------------------------------- 最近在使用hive時,需要將hive查詢的數據導出到本地文件系統,HQL語法如下&…

MSSQL-最佳實踐-如何監控備份還原進度

title: MSSQL 最佳實踐 如何監控備份還原進度 author: 風移 摘要 本期月報是SQL Server備份還原專題分享系列的第六期,打算分享給大家如何監控SQL Server備份還原進度。 場景引入 由于SQL Server備份還原操作是重I/O讀寫操作,尤其是當數據庫或數據庫備…

搶車位app下載_太方便了!有了這個APP,找車位再也不用“兜圈子”了

對于不少有車一族來說,決定出門是否開車的重要因素之一,那就是目的地是不是好停車,因為找車位可真是一件很頭疼的事,不過未來,滿街找停車位的尷尬情況將會越來越少,近日,鎮江智慧停車平臺正式上…

bmp文件頭_圖像算法原理與實踐——圖像文件存儲

圖像數據在計算機儲器設備中的存儲形式是圖像文件,圖像必須按照某個公開的、規范約終結定的數據存儲順序和結構進行保存,才能使不同的程序對圖像文件順利進行打開或存盤操作,實現數據共享。圖像數據在文件中的存儲順序和結構稱為圖像文件格式…

一共81個,開源大數據處理工具匯總

查詢引擎 一、Phoenix 貢獻者::Salesforce 簡介:這是一個Java中間層,可以讓開發者在Apache HBase上執行SQL查詢。Phoenix完全使用Java編寫,代碼位于GitHub上,并且提供了一個客戶端可嵌入的JDBC驅動。 Phoen…

html5怎么刪除樣式,css怎么刪除一個樣式

css刪除一個樣式的方法:首先創建一個HTML示例文件;然后給div添加css樣式;最后通過“removeClass()”方法從被選元素刪除一個或多個類即可。本教程操作環境:windows7系統、HTML5&&CSS3版、Dell G3電腦。CSS添加樣式、刪除樣…

python語言中內置的字符串排版方法_Python14之字符串(各種奇葩的內置方法)

一、字符串的分片操作其分片操作和列表和元組一樣1 str1 keshengtao2 str1[2:6]3 shen4 str1[:]5 keshengtao6 str1[:4]7 keshView Code二、訪問字符串中的字符注:字符串中的單個字符,同樣也是字符串1 str1 keshengtao2 str1[3]3 hView Code三、字符串…

sqlserver 字符串轉化數值函數_Excel常見函數用法(TEXT函數)

基本語句:=TEXT(數值,文本格式) 用法說明:TEXT函數可通過格式代碼對數字應用格式,進而更改數字的顯示方式。其中,參數①是我們想要改變格式的數值,它可以是文本,也可以是數字;而參數②就是我們想要參數①最終變成的格式,它的作用原理和自定義數字格式一致,基本用法共…

laravel 的 表單請求

在對文章、帖子等信息進行創建、更新的時候,需要進行表單驗證的時候,一般我們使用Request來獲取輸入的值來進行驗證,這樣需要在每一個方法中進行書寫驗證規則。 laravel 提供了創建表單請求,我們可以使用 artisan 來創建一個表單請…

Flume概述

官網 http://flume.apache.org/ 介紹 Flume是一個分布式、可靠、和高可用的海量日志采集、聚合和傳輸的系統。Flume可以采集文件,socket數據包等各種形式源數據,又可以將采集到的數據輸出到HDFS、hbase、hive、kafka等眾多外部存儲系統中。一般的采集需…

日常計算機操作知識試題,關于2017計算機一級考試試題操作題

關于2017計算機一級考試試題操作題在日常學習和工作中,我們很多時候都不得不用到試題,試題可以幫助參考者清楚地認識自己的知識掌握程度。那么一般好的試題都具備什么特點呢?下面是小編為大家整理的關于2017計算機一級考試試題操作題&#xf…

概率分布分位點_概率分布的分位數三.PPT

概率分布的分位數三5.2 常用統計分布 一、常見分布 t 分布具有下列性質: 性質5.6 設 , 則當 時有 性質5.7 設 , 是T的分布密度, 則 此性質說明,當 時,T分布的極限 分布是標準正態分布。 這說明F分布極限分布也是正態分…

mastercam加工報表生成_聽說最厲害的工程師才敢這樣玩五軸加工?

今天讓我們一起來看看五軸有些什么接地氣的玩法:側刃加工(此圖非動圖)相較使用刀具底刃加工,利用刀具側刃加工可以得到更加光滑的加工表面。適用于航空航天工業中復雜型腔工件的精加工。Mastercam提供專用功能可有效防止刀具和零件型腔底部出現過切&…

Flume安裝(單節點)

Flume單節點的安裝非常簡單。 1、下載 2、解壓 3、配置環境變量FLUME_HOME 4、flume-env.sh配置JAVA_HOME 具體步驟 下載 http://flume.apache.org/download.html 解壓 tar -zxvf apache-flume-1.7.0-bin.tar.gz 配置FLUME_HOME root 用戶或者 su root vi /etc/pro…

電子科技大學2019年計算機復試分數線,2019考研電子科技大學復試分數線已公布...

2019考研電子科技大學復試分數線已公布!相信接下來很多2019考研考生都會關注34所考研復試分數線及考研國家線相關信息。中公考研小編整理了“2019考研電子科技大學復試分數線已公布”文章,希望能對2019考研考生有幫助~根據教育部有關文件精神&#xff0c…

量子計算時代來臨?D-Wave 量子計算機使運算速度提高 1 億倍!

查爾斯巴貝奇(Charles Babbage)于 19 世紀 30 年代提出了一款難以實現的概念性分析引擎,自那時以來,計算機科學一直為了保持領先于時代的地位而奮力前行。在過去 75 年內,許多驚人的創舉接連出現:可編程電子…

python編的游戲越玩越卡_用Python寫游戲,不到十分鐘就學會了

安裝pygame本人電腦是windows 10、python3.6,pygame下載地址:pypi.python.org/pypi/Pygame…請自行下載對應python版本的pygame運行以下命令創建Pygame窗口及響應用戶輸入新建一個文件夾alien_invasion,并在文件夾中新建alien_invasion.py文件…

Map Reduce和流處理

歡迎大家前往騰訊云社區,獲取更多騰訊海量技術實踐干貨哦~本文由從流域到海域翻譯,發表于騰訊云社區map()和reduce()是在集群式設備上用來做大規模數據處理的方法,用戶定義一個特定的映射,函數將使用該映射對一系列鍵值對進行處理…

Flume實戰監聽網絡端口

具體的配置解釋見官網 http://flume.apache.org/FlumeUserGuide.html#flume-sources 1、flume安裝目錄下新建文件夾 example 2、在example下新建文件 netcat-logger.conf內容如下:#name the components on this agent a1.sources r1 a1.sinks k1 a1.channels…