最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PostgreSQL的日期時(shí)間差DATEDIFF實(shí)例詳解

 更新時(shí)間:2023年04月13日 10:37:54   作者:Zhang.Voi  
PostgreSQL是一款簡介而又性能強(qiáng)大的數(shù)據(jù)庫應(yīng)用程序,其在日期時(shí)間數(shù)據(jù)方面所支持的功能也都非常給力,下面這篇文章主要給大家介紹了關(guān)于PostgreSQL的日期時(shí)間差DATEDIFF的相關(guān)資料,需要的朋友可以參考下

PostgreSQL-DATEDIFF-日期時(shí)間差,以秒,天,月,周等為單位

您可以使用各種日期時(shí)間表達(dá)式或用戶定義的 DATEDIFF 函數(shù)(UDF)在 PostgreSQL 中計(jì)算兩個(gè)日期時(shí)間值之間的差,以秒,分鐘,小時(shí),天,周,月和年為單位。

總覽

PostgreSQL 不提供類似于 SQL Server DATEDIFF 的[2] DATEDIFF 函數(shù),但是您可以使用各種表達(dá)式或 UDF 來獲得相同的結(jié)果。

SQL Server
and Sybase
PostgreSQL
YearsDATEDIFF(yy, start, end)DATE_PART('year', end) - DATE_PART('year', start)
MonthsDATEDIFF(mm, start, end)years_diff * 12 + (DATE_PART('month', end) - DATE_PART('month', start))
DaysDATEDIFF(dd, start, end)DATE_PART('day', end - start)
WeeksDATEDIFF(wk, start, end)TRUNC(DATE_PART('day', end - start)/7)
HoursDATEDIFF(hh, start, end)days_diff * 24 + DATE_PART('hour', end - start )
MinutesDATEDIFF(mi, start, end)hours_diff * 60 + DATE_PART('minute', end - start )
SecondsDATEDIFF(ss, start, end)minutes_diff * 60 + DATE_PART('minute', end - start )

PostgreSQL-年中的日期差異

考慮使用 SQL Server 函數(shù)來計(jì)算以年為單位的兩個(gè)日期之間的差:

SQL Server

  -- Difference between Oct 02, 2011 and Jan 01, 2012 in years
  SELECT DATEDIFF(year, '2011-10-02', '2012-01-01');
  -- Result: 1

請注意,SQL Server DATEDIFF 函數(shù)返回 1 年,盡管日期之間只有 3 個(gè)月。

SQL Server 不計(jì)算日期之間經(jīng)過的整年,它僅計(jì)算年份之間的差異。

在 PostgreSQL 中,您可以從日期中獲取年份部分并將其減去。

PostgreSQL

 -- Difference between Oct 02, 2011 and Jan 01, 2012 in years
  SELECT DATE_PART('year', '2012-01-01'::date) - DATE_PART('year', '2011-10-02'::date);
  -- Result: 1

PostgreSQL-月中的日期差異

考慮使用 SQL Server 函數(shù)來計(jì)算兩個(gè)日期(以月為單位)之間的差額:

SQL Server

  -- Difference between Oct 02, 2011 and Jan 01, 2012 in months
  SELECT DATEDIFF(month, '2011-10-02', '2012-01-01');
  -- Result: 3

在 PostgreSQL 中,您可以將年份之間的差值乘以 12,然后將月份部分之間的差值相加(可以為負(fù))。

PostgreSQL

-- Difference between Oct 02, 2011 and Jan 01, 2012 in months
  SELECT (DATE_PART('year', '2012-01-01'::date) - DATE_PART('year', '2011-10-02'::date)) * 12 +
              (DATE_PART('month', '2012-01-01'::date) - DATE_PART('month', '2011-10-02'::date));
  -- Result: 3

PostgreSQL-日期的天數(shù)差異

考慮使用 SQL Server 函數(shù)來計(jì)算兩天之間的日期差:

SQL Server

 -- Difference between Dec 29, 2011 23:00 and Dec 31, 2011 01:00 in days
  SELECT DATEDIFF(day, '2011-12-29 23:00:00', '2011-12-31 01:00:00');
  -- Result: 2

請注意,DATEDIFF 返回了 2 天,盡管 datetime 值之間只有 1 天 2 小時(shí)。

在 PostgreSQL 中,如果您從另一個(gè)中減去一個(gè)日期時(shí)間值(TIMESTAMP,DATE 或 TIME 數(shù)據(jù)類型),則將獲得一個(gè) INTERVAL 值,格式為“ ddd days hh:mi:ss ”。

   SELECT '2011-12-31 01:00:00'::timestamp - '2011-12-29 23:00:00'::timestamp;
    -- Result: "1 day 02:00:00"
 
    SELECT '2011-12-31 01:00:00'::timestamp - '2010-09-17 23:00:00'::timestamp;
    -- Result: "469 days 02:00:00"

所以,你可以使用 date_part 數(shù)函數(shù) extact 的天數(shù),但它返回的數(shù)量充分的日期之間的天數(shù)。

PostgreSQL

 -- Difference between Dec 29, 2011 23:00 and Dec 31, 2011 01:00 in days
  SELECT DATE_PART('day', '2011-12-31 01:00:00'::timestamp - '2011-12-29 23:00:00'::timestamp);
  -- Result: 1

PostgreSQL-周中的日期差異

考慮使用 SQL Server 函數(shù)來計(jì)算兩周中兩個(gè)日期之間的差額:

SQL Server

-- Difference between Dec 22, 2011 and Dec 31, 2011 in weeks
  SELECT DATEDIFF(week, '2011-12-22', '2011-12-31');
  -- Result: 1

DATEDIFF 返回日期時(shí)間值之間的整周數(shù)。

在 PostgreSQL 中,您可以使用表達(dá)式定義天數(shù)(請參見上文)并將其除以 7。需要 TRUNC 才能刪除除后的小數(shù)部分。

PostgreSQL

  -- Difference between Dec 22, 2011 and Dec 31, 2011 in weeks
  SELECT TRUNC(DATE_PART('day', '2011-12-31'::timestamp - '2011-12-22'::timestamp)/7);
  -- Result: 1

PostgreSQL-日期時(shí)間的小時(shí)差異

考慮使用 SQL Server 函數(shù)來計(jì)算兩個(gè) datetime 值之間的時(shí)差,以小時(shí)為單位:

SQL Server

  -- Difference between Dec 30, 2011 08:55 and Dec 30, 2011 9:05 in weeks
  SELECT DATEDIFF(hour, '2011-12-30 08:55', '2011-12-30 09:05');
  -- Result: 1

請注意,盡管 datetime 值之間只有 10 分鐘的差異,但 DATEDIFF 返回了 1 小時(shí)。

在 PostgreSQL 中,您可以使用表達(dá)式來定義天數(shù)(請參見上文),乘以 24 并乘以小時(shí)。

PostgreSQL

 -- Difference between Dec 30, 2011 08:55 and Dec 30, 2011 9:05 in weeks
  SELECT DATE_PART('day', '2011-12-30 08:55'::timestamp - '2011-12-30 09:05'::timestamp) * 24 +
              DATE_PART('hour', '2011-12-30 08:55'::timestamp - '2011-12-30 09:05'::timestamp);
  -- Result: 0

請注意,此 PostreSQL 表達(dá)式返回在 datetime 值之間傳遞的完整小時(shí)數(shù)。

PostgreSQL-分鐘中的日期時(shí)間差異

考慮使用 SQL Server 函數(shù)以分鐘為單位計(jì)算兩個(gè)日期時(shí)間值之間的差:

SQL Server

  -- Difference between Dec 30, 2011 08:54:55 and  Dec 30, 2011 08:56:10 in minutes
  SELECT DATEDIFF(minute, '2011-12-30 08:54:55', '2011-12-30 08:56:10');
  -- Result: 2
 
  -- Time only
  SELECT DATEDIFF(minute, '08:54:55', '08:56:10');
  -- Result: 2

請注意,盡管 datetime 值之間只有 1 分 15 秒,但 DATEDIFF 返回了 2 分鐘。

在 PostgreSQL 中,您可以使用一個(gè)表達(dá)式來定義小時(shí)數(shù)(請參閱上文),乘以 60 并乘以分鐘。

PostgreSQL

-- Difference between Dec 30, 2011 08:54:55 and  Dec 30, 2011 08:56:10 in minutes
  SELECT (DATE_PART('day', '2011-12-30 08:56:10'::timestamp - '2011-12-30 08:54:55'::timestamp) * 24 +
               DATE_PART('hour', '2011-12-30 08:56:10'::timestamp - '2011-12-30 08:54:55'::timestamp)) * 60 +
               DATE_PART('minute', '2011-12-30 08:56:10'::timestamp - '2011-12-30 08:54:55'::timestamp);
  -- Result: 1
 
  -- Time only
  SELECT DATE_PART('hour', '08:56:10'::time - '08:54:55'::time) * 60 +
              DATE_PART('minute', '08:56:10'::time - '08:54:55'::time);
  -- Result: 1

請注意,這些 PostreSQL 表達(dá)式返回在 datetime 值之間傳遞的完整分鐘數(shù)。

PostgreSQL-日期時(shí)間差(以秒為單位)

考慮使用 SQL Server 函數(shù)以秒為單位計(jì)算兩個(gè)日期時(shí)間值之間的差:

SQL Server

  -- Difference between Dec 30, 2011 08:54:55 and  Dec 30, 2011 08:56:10 in seconds
  SELECT DATEDIFF(second, '2011-12-30 08:54:55', '2011-12-30 08:56:10');
  -- Result: 75
 
  -- Time only
  SELECT DATEDIFF(second, '08:54:55', '08:56:10');
  -- Result: 75

在 PostgreSQL 中,您可以使用表達(dá)式定義分鐘數(shù)(請參見上文),乘以 60 并乘以秒。

PostgreSQL

-- Difference between Dec 30, 2011 08:54:55 and  Dec 30, 2011 08:56:10 in seconds
  SELECT ((DATE_PART('day', '2011-12-30 08:56:10'::timestamp - '2011-12-30 08:54:55'::timestamp) * 24 +
                DATE_PART('hour', '2011-12-30 08:56:10'::timestamp - '2011-12-30 08:54:55'::timestamp)) * 60 +
                DATE_PART('minute', '2011-12-30 08:56:10'::timestamp - '2011-12-30 08:54:55'::timestamp)) * 60 +
                DATE_PART('second', '2011-12-30 08:56:10'::timestamp - '2011-12-30 08:54:55'::timestamp);
  -- Result: 75
 
  -- Time only
  SELECT (DATE_PART('hour', '08:56:10'::time - '08:54:55'::time) * 60 +
               DATE_PART('minute', '08:56:10'::time - '08:54:55'::time)) * 60 +
               DATE_PART('second', '08:56:10'::time - '08:54:55'::time);
  -- Result: 75

PostgreSQL DATEDIFF-用戶定義函數(shù)(UDF)

除了使用單獨(dú)的表達(dá)式來計(jì)算每個(gè)時(shí)間單位的日期時(shí)間差之外,還可以使用類似于 SQL Server DATEDIFF 函數(shù)的函數(shù)。

PostgreSQL

CREATE OR REPLACE FUNCTION DateDiff (units VARCHAR(30), start_t TIMESTAMP, end_t TIMESTAMP)
     RETURNS INT AS $$
   DECLARE
     diff_interval INTERVAL;
     diff INT = 0;
     years_diff INT = 0;
   BEGIN
     IF units IN ('yy', 'yyyy', 'year', 'mm', 'm', 'month') THEN
       years_diff = DATE_PART('year', end_t) - DATE_PART('year', start_t);
 
       IF units IN ('yy', 'yyyy', 'year') THEN
         -- SQL Server does not count full years passed (only difference between year parts)
         RETURN years_diff;
       ELSE
         -- If end month is less than start month it will subtracted
         RETURN years_diff * 12 + (DATE_PART('month', end_t) - DATE_PART('month', start_t));
       END IF;
     END IF;
 
     -- Minus operator returns interval 'DDD days HH:MI:SS'
     diff_interval = end_t - start_t;
 
     diff = diff + DATE_PART('day', diff_interval);
 
     IF units IN ('wk', 'ww', 'week') THEN
       diff = diff/7;
       RETURN diff;
     END IF;
 
     IF units IN ('dd', 'd', 'day') THEN
       RETURN diff;
     END IF;
 
     diff = diff * 24 + DATE_PART('hour', diff_interval);
 
     IF units IN ('hh', 'hour') THEN
        RETURN diff;
     END IF;
 
     diff = diff * 60 + DATE_PART('minute', diff_interval);
 
     IF units IN ('mi', 'n', 'minute') THEN
        RETURN diff;
     END IF;
 
     diff = diff * 60 + DATE_PART('second', diff_interval);
 
     RETURN diff;
   END;
   $$ LANGUAGE plpgsql;

如何使用 PostgreSQL DATEDIFF 函數(shù)

語法與 SQL Server DATEDIFF 相似,但是您必須在 PostgreSQL 中將時(shí)間單位(秒,分鐘等及其縮寫)指定為字符串文字,例如:

   -- Difference between Dec 30, 2011 08:54:55 and  Dec 30, 2011 08:56:10 in seconds
  SELECT DATEDIFF('second', '2011-12-30 08:54:55'::timestamp, '2011-12-30 08:56:10'::timestamp);
  -- Result: 75

PostgreSQL DATEDIFF 函數(shù)僅適用于 TIME

您可以具有另一個(gè)僅對時(shí)間數(shù)據(jù)類型起作用的函數(shù)。PostgreSQL 支持具有相同名稱但參數(shù)數(shù)據(jù)類型不同的重載函數(shù):

CREATE OR REPLACE FUNCTION DateDiff (units VARCHAR(30), start_t TIME, end_t TIME)
     RETURNS INT AS $$
   DECLARE
     diff_interval INTERVAL;
     diff INT = 0;
   BEGIN
     -- Minus operator for TIME returns interval 'HH:MI:SS'
     diff_interval = end_t - start_t;
 
     diff = DATE_PART('hour', diff_interval);
 
     IF units IN ('hh', 'hour') THEN
       RETURN diff;
     END IF;
 
     diff = diff * 60 + DATE_PART('minute', diff_interval);
 
     IF units IN ('mi', 'n', 'minute') THEN
        RETURN diff;
     END IF;
 
     diff = diff * 60 + DATE_PART('second', diff_interval);
 
     RETURN diff;
   END;
   $$ LANGUAGE plpgsql;

登錄后復(fù)制

例如,可以將此函數(shù)調(diào)用為:

  -- Difference between 08:54:55 and 08:56:10 in seconds
  SELECT DATEDIFF('second', '08:54:55'::time, '08:56:10'::time);
  -- Result: 75

總結(jié)

到此這篇關(guān)于PostgreSQL日期時(shí)間差DATEDIFF的文章就介紹到這了,更多相關(guān)PostgreSQL日期時(shí)間差DATEDIFF內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解PostgreSQL 語法中關(guān)鍵字的添加

    詳解PostgreSQL 語法中關(guān)鍵字的添加

    這篇文章主要介紹了詳解PostgreSQL 語法中關(guān)鍵字的添加的相關(guān)資料,這里說明下在parser語法解析模塊添加關(guān)鍵字,需要的朋友可以參考下
    2017-08-08
  • PostgreSQL使用SQL實(shí)現(xiàn)俄羅斯方塊的示例

    PostgreSQL使用SQL實(shí)現(xiàn)俄羅斯方塊的示例

    基于PostgreSQL實(shí)現(xiàn)的俄羅斯方塊游戲項(xiàng)目Tetris-SQL,通過純SQL代碼和數(shù)據(jù)庫操作重構(gòu)了經(jīng)典游戲邏輯,展現(xiàn)了SQL語言的圖靈完備性和技術(shù)潛力,本文介紹PostgreSQL使用SQL實(shí)現(xiàn)俄羅斯方塊的示例,感興趣的朋友一起看看吧
    2022-04-04
  • PgSQl臨時(shí)表創(chuàng)建及應(yīng)用實(shí)例解析

    PgSQl臨時(shí)表創(chuàng)建及應(yīng)用實(shí)例解析

    這篇文章主要介紹了PgSQl臨時(shí)表創(chuàng)建及應(yīng)用實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • PostgreSQL 分頁查詢時(shí)間的2種比較方法小結(jié)

    PostgreSQL 分頁查詢時(shí)間的2種比較方法小結(jié)

    這篇文章主要介紹了PostgreSQL 分頁查詢時(shí)間的2種比較方法小結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • PostgreSQL function返回多行的操作

    PostgreSQL function返回多行的操作

    這篇文章主要介紹了PostgreSQL function返回多行的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • PostgreSQL 序列綁定字段與不綁定字段的區(qū)別說明

    PostgreSQL 序列綁定字段與不綁定字段的區(qū)別說明

    這篇文章主要介紹了PostgreSQL 序列綁定字段與不綁定字段的區(qū)別說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • postgresql 切換 log、xlog日志的實(shí)現(xiàn)

    postgresql 切換 log、xlog日志的實(shí)現(xiàn)

    這篇文章主要介紹了postgresql 切換 log、xlog日志的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL 性能優(yōu)化之服務(wù)器參數(shù)配置操作

    PostgreSQL 性能優(yōu)化之服務(wù)器參數(shù)配置操作

    這篇文章主要介紹了PostgreSQL 性能優(yōu)化之服務(wù)器參數(shù)配置操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL ERROR: invalid escape string 解決辦法

    PostgreSQL ERROR: invalid escape string 解決辦法

    這篇文章主要介紹了PostgreSQL ERROR: invalid escape string 解決辦法,本文環(huán)境是JDBC+PostgreSQL,需要的朋友可以參考下
    2014-07-07
  • PostgreSQL工具pgAdmin的介紹及使用

    PostgreSQL工具pgAdmin的介紹及使用

    本文主要介紹了PostgreSQL工具pgAdmin的介紹及使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評論

且末县| 资阳市| 九龙坡区| 贞丰县| 富平县| 阿城市| 施甸县| 新巴尔虎右旗| 华亭县| 灯塔市| 彭州市| 怀来县| 博乐市| 绥江县| 江陵县| 张掖市| 南皮县| 会同县| 湟中县| 额敏县| 遵义县| 博罗县| 三穗县| 苍溪县| 河北省| 札达县| 平度市| 黎城县| 嵊州市| 新和县| 汝南县| 海口市| 哈尔滨市| 柳河县| 岑溪市| 金乡县| 徐州市| 安康市| 青浦区| 松桃| 陆良县|