PostgreSQL兼容之mysql的date_formate函数

目录

一、MYSQL的DATE_FORMATE语法

二、PostgreSQL如何兼容

三、自定义函数DATE_FORMATE


一、MYSQL的DATE_FORMATE
语法

DATE_FORMAT(date,format)
date 参数是合法的日期。format 规定日期/时间的输出格式。

可以使用的格式有:

格式    描述
%a    缩写星期名
%b    缩写月名
%c    月,数值
%D    带有英文前缀的月中的天
%d    月的天,数值(00-31)
%e    月的天,数值(0-31)
%f    微秒
%H    小时 (00-23)
%h    小时 (01-12)
%I    小时 (01-12)
%i    分钟,数值(00-59)
%j    年的天 (001-366)
%k    小时 (0-23)
%l    小时 (1-12)
%M    月名
%m    月,数值(00-12)
%p    AM 或 PM
%r    时间,12-小时(hh:mm:ss AM 或 PM)
%S    秒(00-59)
%s    秒(00-59)
%T    时间, 24-小时 (hh:mm:ss)
%U    周 (00-53) 星期日是一周的第一天
%u    周 (00-53) 星期一是一周的第一天
%V    周 (01-53) 星期日是一周的第一天,与 %X 使用
%v    周 (01-53) 星期一是一周的第一天,与 %x 使用
%W    星期名
%w    周的天 (0=星期日, 6=星期六)
%X    年,其中的星期日是周的第一天,4 位,与 %V 使用
%x    年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y    年,4 位
%y    年,2 位


例子

下面的脚本使用 DATE_FORMAT() 函数来显示不同的格式。我们使用 NOW() 来获得当前的日期/时间:

DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')
DATE_FORMAT(NOW(),'%m-%d-%Y')
DATE_FORMAT(NOW(),'%d %b %y')
DATE_FORMAT(NOW(),'%d %b %Y %T:%f')

结果如下:

Oct 19 2021 12:05 PM
10-19-2021
19 Oct 21
19 Oct 2021 12:07:46.635


二、PostgreSQL如何兼容


        在PostgreSQL中,我么可以使用自定义date_formate函数来兼容MySQL的date_formate,以简化迁移适配的应用SQL改造工作。在进行自定义函数前,我们需要掌握PostgreSQL的时间/日期表现形式及处理逻辑基础,参考:

数据类型格式化函数:

        PostgreSQL: Documentation: 11: 9.8. Data Type Formatting Functions

时间/日期函数和操作符:

        PostgreSQL: Documentation: 11: 9.9. Date/Time Functions and Operators

具备以上基础然后根据应用程序中所使用到转换后MYSQL的日期格式,制定PostgreSQL相对应的日期表现格式。

        如DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')在MYSQL中处理后日期的表现形式为Oct 19 2021 12:05 PM【缩写月名  月的天  年(4位)  小时(0-12):分钟  AM或PM】),则PostgreSQL

中所对应的日期格式可拼为:Mon DD YYYY HH:MI AM

    

 select to_char(now(),'Mon DD YYYY HH:MI AM')  表现形式为Oct  20 2021 12:23 PM

三、自定义函数DATE_FORMATE


如我们需要兼容以下例子       

 DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')     表现形式为 Oct 19 2021 12:05 PM

 DATE_FORMAT(NOW(),'%m-%d-%Y')  表现形式为 10-19-2021

 DATE_FORMAT(NOW(),'%d %b %y')  表现形式为 19 Oct 21

 DATE_FORMAT(NOW(),'%d %b %Y %T:%f')  表现形式为 19 Oct 2021 12:07:46.635

定义函数如下:

        

CREATE OR REPLACE FUNCTION date_format(indate anyelement, informate text)
returns text as $$
BEGIN
    IF upper($2) = upper('%b %d %Y %h:%i %p') THEN
        return to_char($1,'Mon DD YYYY HH:MI AM');
    END IF;
 
    IF upper($2) = upper('%m-%d-%Y') THEN
        return to_char($1,'MM-DD-YYYY');
    END IF;
 
    IF upper($2) = upper('%d %b %y') THEN
        return to_char($1,'DD Mon YY');
    END IF;
 
    IF upper($2) = upper('%d %b %Y %T:%f') THEN
        return to_char($1,'DD Mon YYYY HH24:MI:SS.MS');
    END IF;
 
    raise exception '时间格式:% 未在函数中定义,请添加!',$2;
 
    return null;
END;
$$ LANGUAGE plpgsql;

测试函数:

select date_format(now(),'%b %d %Y %h:%i %p');   ---Oct 20 2021 12:40 PM

select date_format(now(),'%m-%d-%Y');   ---10-20-2021

select date_format(now(),'%d %b %y');   ---20 Oct 21

select date_format(now(),'%d %b %Y %T:%f');  ---20 Oct 2021 12:44:34.904


将输出结果格式与MySQL中输出结果格式对比:

MYSQL中                            PostgreSQL中
Oct 19 2021 12:05 PM            Oct 20 2021 12:40 PM
10-19-2021                      10-20-2021
19 Oct 21                       20 Oct 21
19 Oct 2021 12:07:46.635        20 Oct 2021 12:44:34.904


如上,日期表现格式相同,说明此自定义兼容函数date_formate可行。

第二种存储函数写法:

CREATE OR REPLACE FUNCTION date_format(indate anyelement, intext text)
 RETURNS text
 LANGUAGE plpgsql
AS $function$
BEGIN
IF upper(inText) = upper('%Y%m%d_%H%i') THEN
return to_char(inDate,'YYYYMMDD_HH24MI');
END IF;
IF upper(inText) = upper('%Y%m%d%H%i%s') THEN
return to_char(inDate,'YYYYMMDDHH24MISS');
END IF;
IF upper(inText) = upper('%Y-%m-%d %H') THEN
return to_char(inDate,'YYYY-MM-DD HH24');
END IF;
IF upper(inText) = upper('%Y-%m-%d') THEN
return to_char(inDate,'YYYY-MM-DD');
END IF;
IF upper(inText) = upper('%Y-%m') THEN
return to_char(inDate,'YYYY-MM');
end if;
IF upper(inText) = upper('%m%d') THEN
return to_char(inDate,'MMDD');
END IF;
return '';
END;
$function$

ps:上面的脚本需在dbeaver工具执行,在dbvisualizer工具执行会报错。

汇集上面的两种方法:

CREATE OR REPLACE FUNCTION date_format(indate anyelement, intext text)
 RETURNS text
 LANGUAGE plpgsql
AS $function$
BEGIN
	IF upper(inText) = upper('%Y%m%d_%H%i') THEN
	return to_char(inDate,'YYYYMMDD_HH24MI');
	END IF;
	IF upper(inText) = upper('%Y%m%d%H%i%s') THEN
	return to_char(inDate,'YYYYMMDDHH24MISS');
	END IF;
	IF upper(inText) = upper('%Y-%m-%d %H') THEN
	return to_char(inDate,'YYYY-MM-DD HH24');
	END IF;
	IF upper(inText) = upper('%Y-%m-%d') THEN
	return to_char(inDate,'YYYY-MM-DD');
	END IF;
	IF upper(inText) = upper('%Y-%m') THEN
	return to_char(inDate,'YYYY-MM');
	end if;
	IF upper(inText) = upper('%m%d') THEN
	return to_char(inDate,'MMDD');
	END IF;

--第二种
	IF upper(inText) = upper('%b %d %Y %h:%i %p') THEN
        return to_char(inDate,'Mon DD YYYY HH:MI AM');
    END IF;
 
    IF upper(inText) = upper('%m-%d-%Y') THEN
        return to_char(inDate,'MM-DD-YYYY');
    END IF;
 
    IF upper(inText) = upper('%d %b %y') THEN
        return to_char(inDate,'DD Mon YY');
    END IF;
 
    IF upper(inText) = upper('%d %b %Y %T:%f') THEN
        return to_char(inDate,'DD Mon YYYY HH24:MI:SS.MS');
    END IF;
   
   IF upper(inText) = upper('%Y-%m-%d') THEN
        return to_char(inDate,'YYYY-MM-DD');
    END IF;
   
    raise exception '时间格式:% 未在函数中定义,请添加!',$2;
   
return '';
END;
$function$

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前言 作者和贡献者 I. 入门指引 1. 简介 2. 简明教程 II. 安装与配置 3. 安装前需要考虑的事项 4. Unix 系统下的安装 5. Mac OS X 系统下的安装 6. Windows 系统下的安装 7. PECL 扩展库安装 8. 还有问题? 9. 运行时配置 III. 语言参考 10. 基本语法 11. 类型 12. 变量 13. 常量 14. 表达式 15. 运算符 16. 流程控制 17. 函数 18. 类与对象(PHP 4) 19. 类与对象(PHP 5) 20. 异常处理 21. 引用的解释 IV. 安全 22. 简介 23. 总则 24. 以 CGI 模式安装时 25. 以 Apache 模块安装时 26. 文件系统安全 27. 数据库安全 28. 错误报告 29. 使用 Register Globals 30. 用户提交的数据 31. 魔术引号 32. 隐藏 PHP 33. 保持更新 V. 特点 34. 用 PHP 进行 HTTP 认证 35. cookies 36. 会话 37. 处理 XForms 38. 文件上传处理 39. 使用远程文件 40. 连接处理 41. 数据库永久连接 42. 安全模式 43. PHP 的命令行模式 VI. 函数参考 I. .NET 函数 II. Advanced PHP debugger III. Alternative PHP Cache IV. Apache 特有函数 V. Array 数组函数 VI. Aspell 函数(已废弃) VII. BC math 高精度数学函数 VIII. Bzip2 压缩函数 IX. Calendar 日历函数 X. CCVS API Functions [deprecated] XI. Character Type Functions XII. Classes/Objects 类/对象函数 XIII. Classkit Functions XIV. ClibPDF Functions XV. COM 和 .Net(Windows)函数 XVI. Crack Functions XVII. Credit Mutuel CyberMUT functions XVIII. CURL, Client URL Library Functions XIX. Cybercash Payment Functions XX. Cyrus IMAP administration Functions XXI. Database (dbm-style) Abstraction Layer Functions XXII. Date/Time 日期/时间函数 XXIII. DB++ Functions XXIV. dBase Functions XXV. DBM Functions [deprecated] XXVI. dbx Functions XXVII. Direct IO Functions XXVIII. Directory 目录函数 XXIX. DOM Functions XXX. DOM XML Functions XXXI. Error Handling and Logging Functions XXXII. Exif Functions XXXIII. File Alteration Monitor Functions XXXIV. filePro Functions XXXV. Filesystem 文件系统函数 XXXVI. Firebird/InterBase Functions XXXVII. Firebird/Interbase Functions (PDO_FIREBIRD) XXXVIII. Forms Data Format Functions XXXIX. FriBiDi Functions XL. FrontBase Functions XLI. FTP 函数 XLII. Function Handling Functions XLIII. Gettext XLIV. GMP Functions XLV. GNU Readline XLVI. GNU Recode Functions XLVII. HTTP 函数 XLVIII. Hyperwave API Functions XLIX. Hyperwave Functions L. IBM DB2, Cloudscape and Apache Derby Functions LI. ICAP Functions [deprecated] LII. iconv Functions LIII. ID3 Functions LIV. IIS Administration Functions LV. Image 图像函数 LVI. IMAP, POP3 and NNTP Functions LVII. Informix Functions LVIII. Ingres II Functions LIX. IRC Gateway Functions LX. KADM5 LXI. LDAP Functions LXII. libxml Functions LXIII. Lotus Notes Functions LXIV. LZF Functions LXV. Mail Functions LXVI. mailparse Functions LXVII. Math 数学函数 LXVIII. MaxDB PHP Extension LXIX. MCAL Functions LXX. Mcrypt Encryption Functions LXXI. MCVE Payment Functions LXXII. Memcache Functions LXXIII. Mhash Functions LXXIV. Microsoft SQL Server and Sybase Functions (PDO_DBLIB) LXXV. Microsoft SQL Server Functions LXXVI. Mimetype Functions LXXVII. Ming functions for Flash LXXVIII. Miscellaneous Functions LXXIX. mnoGoSearch Functions LXXX. Mohawk Software Session Handler Functions LXXXI. mSQL Functions LXXXII. Multibyte String Functions LXXXIII. muscat Functions LXXXIV. MySQL 函数 LXXXV. MySQL Functions (PDO_MYSQL) LXXXVI. MySQL Improved Extension LXXXVII. Ncurses Terminal Screen Control Functions LXXXVIII. Network Functions LXXXIX. Net_Gopher XC. NSAPI-specific Functions XCI. Object Aggregation/Composition Functions XCII. Object property and method call overloading XCIII. ODBC and DB2 functions (PDO_ODBC) XCIV. ODBC Functions (Unified) XCV. oggvorbis XCVI. OpenAL Audio Bindings XCVII. OpenSSL Functions XCVIII. Oracle 函数 XCIX. Oracle Functions (PDO_OCI) C. Oracle 函数(已废弃) CI. Output Control 输出控制函数 CII. Ovrimos SQL Functions CIII. Paradox File Access CIV. Parsekit Functions CV. PDF functions CVI. PDO Functions CVII. PHP / Java Integration CVIII. PHP bytecode Compiler CIX. PHP Options&Information CX. POSIX Functions CXI. PostgreSQL 数据库函数 CXII. PostgreSQL Functions (PDO_PGSQL) CXIII. PostgreSQL Session Save Handler CXIV. PostScript document creation CXV. Printer Functions CXVI. Process Control Functions CXVII. Program Execution Functions CXVIII. Pspell Functions CXIX. qtdom Functions CXX. Radius CXXI. Rar Functions CXXII. Perl 兼容正则表达式函数 CXXIII. POSIX 扩展正则表达式函数 CXXIV. runkit Functions CXXV. SDO Functions CXXVI. SDO Relational Data Access Service Functions CXXVII. SDO XML Data Access Service Functions CXXVIII. Secure Shell2 Functions CXXIX. Semaphore, Shared Memory and IPC Functions CXXX. SESAM Database Functions CXXXI. Session Handling Functions CXXXII. Shared Memory Functions CXXXIII. Shockwave Flash Functions CXXXIV. SimpleXML functions CXXXV. SNMP 函数 CXXXVI. SOAP Functions CXXXVII. Socket Functions CXXXVIII. SQLite Functions CXXXIX. SQLite Functions (PDO_SQLITE) CXL. Standard PHP Library (SPL) Functions CXLI. Stream Functions CXLII. String 字符串处理函数 CXLIII. Sybase Functions CXLIV. TCP Wrappers Functions CXLV. Tidy Functions CXLVI. Tokenizer Functions CXLVII. Unicode Functions CXLVIII. URL 函数 CXLIX. Variable 变量函数 CL. Verisign Payflow Pro Functions CLI. vpopmail Functions CLII. W32api 函数 CLIII. WDDX Functions CLIV. xattr Functions CLV. xdiff Functions CLVI. XML 语法解析函数 CLVII. XML-RPC 函数 CLVIII. XMLReader functions CLIX. XSL functions CLX. XSLT Functions CLXI. YAZ Functions CLXII. YP/NIS Functions CLXIII. Zip File Functions (Read Only Access) CLXIV. Zlib Compression Functions VII. PHP 和 Zend 引擎内部资料 44. PHP 扩展库编程 API 指南 45. Zend API:深入 PHP 内核 46. 扩展 PHP 3 VIII. FAQ:常见问题 47. 一般信息 48. 邮件列表 49. 获取 PHP 50. 数据库问题 51. 安装常见问题 52. 编译问题 53. 使用 PHP 54. PHP 和 HTML 55. PHP 和 COM 56. PHP 和其它语言 57. 从 PHP/FI 2 移植到 PHP 3 58. 从 PHP 3 移植到 PHP 4 59. 从 PHP 4 移植到 PHP 5 60. 杂类问题 IX. 附录 A. PHP 及其相关工程的历史 B. 从 PHP 4 移植到 PHP 5 C. 从 PHP 3 移植到 PHP 4 D. 从 PHP/FI 2 移植到 PHP 3 E. PHP 的调试 F. 配置选项 G. php.ini 配置选项 H. 扩展库分类 I. 函数别名列表 J. 保留字列表 K. 资源类型列表 L. 支持的协议/封装协议列表 M. 可用过滤器列表 N. 所支持的套接字传输器(Socket Transports)列表 O. PHP 类型比较表 P. 解析器代号列表 Q. 关于本手册 R. 开放出版许可协议 S. 函数索引
MySQL中,有一个函数叫做DATE_FORMAT(),可以用来显示不同的日期/时间格式。例如,使用DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')可以显示当前日期和时间的格式为"Oct 20 2021 12:40 PM"。同样地,使用不同的格式字符串可以得到不同的输出结果。\[1\] 在PostgreSQL中,没有内置的DATE_FORMAT()函数,但我们可以使用自定义函数来实现相同的功能。通过编写自定义函数,我们可以兼容MySQL的日期格式,并简化迁移适配的应用SQL改造工作。在编写自定义函数之前,我们需要了解PostgreSQL的时间/日期表现形式和处理逻辑基础。\[3\] 举例来说,如果我们想要在PostgreSQL中以与MySQL相同的格式显示当前日期和时间,我们可以编写一个自定义函数来实现。这个函数可以接受一个日期/时间值和一个格式字符串作为参数,并返回按照指定格式格式化后的结果。通过调用这个自定义函数,我们可以得到与MySQL中相同的输出结果。\[3\] 总之,虽然在PostgreSQL中没有内置的DATE_FORMAT()函数,但我们可以通过编写自定义函数来实现相同的功能,并兼容MySQL的日期格式。这样可以简化迁移适配的应用SQL改造工作。\[3\] #### 引用[.reference_title] - *1* *2* *3* [PostgreSQL兼容mysqldate_formate函数](https://blog.csdn.net/qq_36501591/article/details/127183395)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值