首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【YashanDB 知识库】MySQL 的 FROM_UNIXTIME 和 UNIX_TIMESTAMP 如何在 YashanDB 改写

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

作者头像
用户10349277
修改2025-03-06 11:42:48
修改2025-03-06 11:42:48
1090
举报
文章被收录于专栏:YashanDB知识库YashanDB知识库

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

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

代码语言:javascript
复制
sql 代码解读复制代码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报错

代码语言:javascript
复制
csharp 代码解读复制代码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的改写方法

代码语言:javascript
复制
sql 代码解读复制代码CREATE OR REPLACE FUNCTION SYS.FROM_UNIXTIME

(

  TIMESTAMP_ IN NUMBER

) RETURN DATE AS

SECONDS_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 AS

SECONDS_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报错的问题得到解决

代码语言:javascript
复制
sql 代码解读复制代码SQL> select FROM_UNIXTIME( 8640000 + UNIX_TIMESTAMP('2024-01-01 00:00:00')) from dual;

FROM_UNIXTIME(864000

------------------------------------------------

2024-04-10 00:00:00

1 row fetched.

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档