ITPub博客

首页 > 数据库 > 国内数据库 > 【YashanDB 知识库】MySQL 的 FROM_UNIXTIME 和 UNIX_TIMESTAMP 如何在 YashanDB 改写

【YashanDB 知识库】MySQL 的 FROM_UNIXTIME 和 UNIX_TIMESTAMP 如何在 YashanDB 改写

原创 国内数据库 作者:崖山数据库系统YashanDB 时间:2025-02-07 17:11:24 0 删除 编辑

本文内容来自 YashanDB 官网,原文内容请见  https://www.yashandb.com/newsinfo/7352691.html?templateId=171...

前言
MySQL 应用常使用 FROM_UNIXTIME 和 UNIX_TIMESTAMP 函数,但是无法在 YashanDB 直接执行,需要改写。本文探讨如何利用 YashanDB 高度兼容 Oracle 的特点快速完成函数改写的方案。

问题
MySQL 示例使用 FROM_UNIXTIME 和 UNIX_TIMESTAMP,执行成功

mysql> select FROM_UNIXTIME( 8640000 + UNIX_TIMESTAMP('2024-01-01 00:00:00')) from dual;+| FROM_UNIXTIME( 8640000 + UNIX_TIMESTAMP('2024-01-01 00:00:00')) |+| 2024-04-10 00:00:00 |+1 row in set (0.00 sec)

YashanDB 报错

SQL> select FROM_UNIXTIME( 8640000 + UNIX_TIMESTAMP('2024-01-01 00:00:00')) from dual;
[1:8]YAS-04243 invalid identifier "FROM_UNIXTIME"

** 解决方法
思考 **
MySQL 的常用函数 FROM_UNIXTIME 和 UNIX_TIMESTAMP,没有在 YashanDB 实现。但是,由于 YashanDB 高度兼容 Oracle,而应用从 MySQL 数据库切换到 Oracle 数据库,也是常见的数据库切换。因此,可以先借鉴 Oracle 如何兼容 MySQL 的常用函数 FROM_UNIXTIME 和 UNIX_TIMESTAMP。

改写方案
通过搜索,找到 Oracle 的改写方法: https://forums.oracle.com/ords/apexds/post/functions-unix-tim...。利用 YashanDB 高度兼容 Oracle 的特点,借鉴 Oracle 的改写方法,实现 YashanDB 的 FROM_UNIXTIME 和 UNIX_TIMESTAMP 函数:

CREATE OR REPLACE FUNCTION SYS.FROM_UNIXTIME(
  TIMESTAMP_ IN NUMBER) RETURN DATE ASSECONDS_PER_DAY NUMBER := 86400;MASK VARCHAR2(50 CHAR) := 'YYYY-MM-DD HH24:MI:SS';REF_DATE DATE;BEGIN
  REF_DATE := TO_DATE('1970-01-01 00:00:00', MASK);
  RETURN REF_DATE + (TIMESTAMP_/SECONDS_PER_DAY);END FROM_UNIXTIME;/
 
 CREATE OR REPLACE FUNCTION SYS.UNIX_TIMESTAMP(
  DATE_ IN DATE) RETURN NUMBER ASSECONDS_PER_DAY NUMBER := 86400;DIFF_BETWEEN_DATES NUMBER;MASK VARCHAR2(50 CHAR) := 'YYYY-MM-DD HH24:MI:SS';REF_DATE DATE;BEGIN
  REF_DATE := TO_DATE('1970-01-01 00:00:00', MASK);
  DIFF_BETWEEN_DATES := DATE_ - REF_DATE;
  RETURN DIFF_BETWEEN_DATES * SECONDS_PER_DAY;END UNIX_TIMESTAMP;/
 CREATE PUBLIC SYNONYM FROM_UNIXTIME FOR SYS.FROM_UNIXTIME;CREATE PUBLIC SYNONYM UNIX_TIMESTAMP FOR SYS.UNIX_TIMESTAMP;

成果
实现 YashanDB 的 FROM_UNIXTIME 和 UNIX_TIMESTAMP 函数,YashanDB 报错的问题得到解决

SQL> select FROM_UNIXTIME( 8640000 + UNIX_TIMESTAMP('2024-01-01 00:00:00')) from dual;FROM_UNIXTIME(8640002024-04-10 00:00:001 row fetched.


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70028812/viewspace-3071349/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
崖山数据库系统YashanDB是深圳计算科学研究院完全自主研发设计的新型数据库系统,融入原创理论,支持单机/主备、共享集群、分布式等多种部署方式,覆盖OLTP/HTAP/OLAP交易和分析混合负载场景,为客户提供一站式的企业级融合数据管理解决方案。

注册时间:2023-04-11

  • 博文量
    722
  • 访问量
    639991