lightdb mysql模式下的datediff
2023-12-18 05:58:29
背景
在信创适配中,有从MySQL迁移过来的程序,其中程序涉及日期加减数字的场景和使用datediff函数的场景。因此在LightDB-X 23.4版本中,MySQL兼容模式下对日期加减数字做了支持,与MySQL行为一致。
MySQL行为
MySQL中日期加减数值型时返回的结果也是数值型。如下
mysql> select curdate() + 1;
+---------------+
| curdate() + 1 |
+---------------+
| 20231219 |
+---------------+
1 row in set (0.00 sec)
mysql> select curdate() + 1.2;
+-----------------+
| curdate() + 1.2 |
+-----------------+
| 20231219.2 |
+-----------------+
1 row in set (0.00 sec)
LightDB MySQL兼容模式行为
在LightDB MySQL兼容模式下,当date类型与整数相加减时返回bigint类型,当date类型与浮点型相加减时返回numeric。如下:
create database test_mysql with lightdb_syntax_compatible_type mysql;
\c test_mysql
lightdb@test_mysql=# select pg_typeof(curdate() + 1), curdate() + 1;
pg_typeof | ?column?
-----------+----------
bigint | 20231219
lightdb@test_mysql=# select pg_typeof(curdate() + 1.2), curdate() + 1.2;
pg_typeof | ?column?
-----------+------------
numeric | 20231219.2
(1 row)
DATEDIFF
当datediff的参数存在日期加减时,根据上一小节可以知道,入参可以是数值型,因此datediff需要对该场景进行支持,如下:
lightdb@test_mysql=# select datediff(curdate(), curdate() - 1);
datediff
----------
1
(1 row)
lightdb@test_mysql=# select datediff(curdate()+1, curdate());
datediff
----------
1
(1 row)
lightdb@test_mysql=# select datediff(curdate()+1, curdate()-1);
datediff
----------
2
(1 row)
lightdb@test_mysql=# select datediff(curdate()+1, curdate()-1.9);
datediff
----------
3
(1 row)
lightdb@test_mysql=# select datediff(curdate()+1.9, curdate()-1.9);
datediff
----------
3
(1 row)
文章来源:https://blog.csdn.net/z465759695/article/details/135053373
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!