mysql sysdate()减一分钟_mysql - mariadb / mysql NOW()和TIMESTAMPDIFF行为-是设计使然吗? - SO中文参考 - www.soinside.co...

只需将一些代码从OracleDB移植到MariaDB,并将某些OracleDB表达式(例如SYSDATE - ? / 1440)转换为MariaDB表示法(这似乎很合适:NOW() - interval 60 * ? second)。

偶然发现以下我的错误表现表达式(基本上比较了两个历史“锁”的持续时间)时,偶然发现我怀疑是已知错误或已记录行为(请帮助)。WHERE (a.expirationDt - a.acquisitionDt) > (b.expirationDt - b.acquisitionDt)

在OracleDB中-此表达式始终有效/可靠。在MariaDB中-似乎取决于所减去的时间戳是否属于同一分钟(然后相减得出正确的秒数),或者来自两个不同的分钟(然后相减的结果似乎被填充/四舍五入到最接近的分钟) ),从而产生违反直觉的结果。

这里有个小样(主要使用now()和“ 20秒前”):root@localhost> maria "select now(), now() - interval 60 * 1/3 second, now() - interval 60000000 * 1/3 microsecond, now() - (now() - interval 60 * 1/3 second), now() - (now() - interval 60000000 * 1/3 microsecond), TIMESTAMPDIFF( second, now() - interval 60 * 1/3 second, now()) from dual"

2020-02-03 13:51:59.0

2020-02-03 13:51:39.0

2020-02-03 13:51:39.0

20.0000

20.000000

20

root@localhost> maria "select now(), now() - interval 60 * 1/3 second, now() - interval 60000000 * 1/3 microsecond, now() - (now() - interval 60 * 1/3 second), now() - (now() - interval 60000000 * 1/3 microsecond), TIMESTAMPDIFF( second, now() - interval 60 * 1/3 second, now()) from dual"

2020-02-03 13:52:02.0

2020-02-03 13:51:42.0

2020-02-03 13:51:42.0

60.0000

60.000000

20

[我知道TIMESTAMPDIFF看起来不错,并且可以相应地重写SQL(只是需要确保如何以亚秒级的精度正确工作,因为“ 20.4秒> 20.2秒”将四舍五入为1将返回false秒精度)。

我的主要问题-我的MariaDB设置是否存在问题?还是特定MariaDB版本中的已知错误?还是设计使然?

只需将一些代码从OracleDB移植到MariaDB,并将某些OracleDB表达式(例如SYSDATE-?/ 1440)转换为MariaDB表示法(这似乎很好:NOW()-间隔60 *?秒)。 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值