SqlSever的datediff函数,在Pgsql可能往往想到用date_part来实现,但这是有差异的,如:

SQLServer:select datediff(d,'2020-02-24 20:59:00','2020-02-25 20:00:00')执行结果为1,因为24与25相差1。

而Pgsql :select date_part('day','2020-02-25 20:00:00'::TIMESTAMP-'2020-02-24 20:59:00') 执行结果为0,因为两天相减之后不足1天。

计算相差年月日时都是同理,SQLServer以新的一年,一天为分界,Pgsql以相差时间为标准。针对计算不同的差应该有不同的方法,可以建一个datediff函数来实现以不同的情况,思路已在代码标注。

create or replace function datediff
(_datepart varchar(5),_startdate timestamp,_enddate timestamp
)
returns int
as $body$
/***********************************************************************************************
author: crf
time:2020-07-6
select datediff('ww','2021-07-4 21:00:01.222','2021-07-11 21:00:01.676')
pgsql实现mssql的datediff函数
***********************************************************************************************/
declare _diffdate int;
begin--年if _datepart = 'yyyy' or _datepart = 'yy'  then_diffdate = date_part('year',_enddate) - date_part('year',_startdate);--月elsif _datepart = 'mm' or _datepart = 'm'  then_diffdate = datediff('yy',_startdate,_enddate)*12 + date_part('month',_enddate) - date_part('month',_startdate);--季elsif _datepart = 'qq' or _datepart = 'q'  then_diffdate = floor(datediff('m',_startdate,_enddate)/3);--日--将日期用to_char转化为不带时分秒的格式,去除时分秒对结果的影响,保持与mssql一致elsif _datepart = 'dy' or _datepart = 'y' or _datepart = 'dd' or _datepart = 'd' or _datepart = 'dw' or _datepart = 'w' then_diffdate = date_part('day',to_char(_enddate,'yyyy-mm-dd')::timestamp - to_char(_startdate,'yyyy-mm-dd')::timestamp);--周--注意mssql周差以周六为界限elsif _datepart = 'ww' or _datepart = 'wk'  then_diffdate = floor((datediff('d',_startdate,_enddate) +  date_part('dow',_startdate))/7);--时--用之前做好的天差乘以24加上用to_char取时数相减,下面时分秒同理elsif _datepart = 'hh'  then_diffdate = datediff('d',_startdate,_enddate)*24 + to_char(_enddate,'hh24')::int - to_char(_startdate,'hh24')::int;--分elsif _datepart = 'mi' or _datepart = 'n'  then_diffdate = datediff('hh',_startdate,_enddate)*60 + to_char(_enddate,'mi')::int - to_char(_startdate,'mi')::int;--秒elsif _datepart = 'ss' or _datepart = 's'  then_diffdate = datediff('n',_startdate,_enddate)*60 + to_char(_enddate,'ss')::int - to_char(_startdate,'ss')::int;
--   --毫秒
--   elsif _datepart = 'ms' then
--     _diffdate = datediff('s',_startdate,_enddate)*1000 + to_char(_enddate,'ms')::int - to_char(_startdate,'ms')::int;end if;return _diffdate;
end $body$
language plpgsql volatile;

Pgsql实现SQLServer的datediff函数相关推荐

  1. sqlserver根据DATEDIFF()函数计算年龄、月龄、天数

    首先我们先来了解一下DATEDIFF()函数 DATEDIFF() 函数返回两个日期之间的时间. 语法:DATEDIFF(datepart,startdate,enddate) 比如我们想要计算年龄 ...

  2. datediff oracle11,数据库中datediff函数用法

    数据库中datediff函数怎么用 如:SELECT DATEDIFF(D,'2015-6-16','2015-6-20') 返回结果表示 两个日期间隔的天数 sql数据库中的datediff函数是什 ...

  3. sqlserver计算时间差DATEDIFF 函数

    DATEDIFF 函数 [日期和时间] 功能 返回两个日期之间的间隔. 语法 DATEDIFF ( date-part, date-expression-1, date-expression-2 ) ...

  4. SQlServer的日期相减(间隔)dateadd ,datediff 函数

    白雨青工作站发文地址:http://www.byqws.com/blog/1044.html 一.dateadd 函数的使用 dateadd() 函数在日期中添加或减去指定的时间间隔. dateadd ...

  5. java datediff函数_sql DATEDIFF 函数

    sql  DATEDIFF 函数 今天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0 昨天的所有数据:select ...

  6. SQL SERVER数据库datediff函数引发的性能问题

    今天,一哥们反馈系统很慢,很卡,让我远程看一下.我远程过去查了一下数据库系统,发现很多阻塞,语句都基本相似,并且表的数据也不大,只有10多万条记录. 1.问题分析: 本系统是sql server数据库 ...

  7. datediff(datediff函数用于计算两个日期之间的时间)

    Date())是什么意?DateDiff("yyyy& 下表列出了 Microsoft® SQL Server™ 识别的日期部分和缩写. 日期部分 缩写 year yy, yyyy ...

  8. VB中DateDiff 函数解释

    VB中DateDiff 函数使用方法 DateDiff (interval, Date1 , Date2[,firstweekofyear[,firstweekofyear]])  返回一个Varia ...

  9. mysql datediff多一天_MySQL DATEDIFF函数获取两个日期的时间间隔的方法

    描述 返回两个日期之间的时间间隔. 语法 DateDiff(interval, date1, date2 [ ,firstdayofweek[ , firstweekofyear]] ) DateDi ...

最新文章

  1. 2. Dubbo和Zookeeper的关系
  2. 寻找U2OS中表达的基因及其promoter并用于后续annotation
  3. spring-boot-maven-plugin 插件的作用(转)
  4. Java反射在JVM的实现
  5. 用java编写计时器_JAVA编写计时器
  6. Spring Cloud Stream整合RabbitMQ
  7. process credentials(二)
  8. axis1 c# 接口 调用_java axis 调用C# webService的例子
  9. 设计模式-观察者模式 发布/订阅模式
  10. python资料-Python资料汇总(建议收藏)
  11. 数百GitHub私有代码库被黑客清空:不交赎金就公开源码!
  12. 软件需求工程 高校教学平台 用户手册
  13. 基于S7–1500的单部六层电梯教程(六)
  14. 解决STM32 硬件IIC死锁在BUSY状态的方法讨论
  15. 函数的右导数与导函数的右极限的关系
  16. ap模式和sta模式共存_ESP8266 RTOS 开发笔记(1)STA+AP模式(共存)
  17. servlet+jsp数据库增删改查实例
  18. 5000字带你了解机房搬迁有哪些步骤?干货收藏!
  19. Portraiture2023免费后期修图插件磨皮神器DR5
  20. NLP数据集SQuAD数据的形式

热门文章

  1. CGNS库在Win32和Win64平台的编译和链接
  2. 【新手教程】如何手动杀毒
  3. 如何安装与配置postgreSql数据库
  4. LOJ6356 四色灯
  5. 半钧先生:《请回答1988》
  6. linux中关于磁盘操作工具fdisk|parted|mk2fs|mke2fs|fsck|badblocks的使用小结
  7. Harbor数据迁移
  8. Si3N4-BN氮化硅-氮化硼系复合材料|α-Si3N4(w)/RBSN复合材料|β-SiC(w)/Si3N4复合材料|金属镍-氮化硅陶瓷复合材料 氮化物
  9. 3S电池过放的一种处理办法
  10. Log抓取和分析-BugReport