gpt4 book ai didi

mysql - 日期时间和时间戳之间的比较

转载 作者:行者123 更新时间:2023-11-29 15:29:16 24 4
gpt4 key购买 nike

我创建了后续的 sql 查询并返回了不可预测的结果,这让我困扰了很长时间。

SELECT 
(CURRENT_TIMESTAMP - INTERVAL 90 DAY) AS 'threshold_time',
txs.created_at,
(CASE WHEN txs.created_at >= 'threshold_time' THEN 1 ELSE 0 END) AS 'chosen'
FROM transactions txs

那么结果是:

threshold_time     |created_at         |chosen|
-------------------|-------------------|------|
2019-08-15 23:33:40|2019-10-23 05:36:22| 0|
2019-08-15 23:33:40|2019-10-24 06:02:43| 0|
2019-08-15 23:33:40|2019-11-11 01:43:36| 0|

奇怪的是,所有选择的应该是 1,但实际上都是 0。如果我更改为

SELECT 
(CURRENT_TIMESTAMP - INTERVAL 90 DAY) AS 'threshold_time',
txs.created_at,
(CASE WHEN (txs.created_at - 'threshold_time') >= 0 THEN 1 ELSE 0 END) AS 'chosen'
FROM transactions txs

那么结果是:

threshold_time     |created_at         |chosen|
-------------------|-------------------|------|
2019-08-15 23:51:43|2019-10-23 05:36:22| 1|
2019-08-15 23:51:43|2019-10-24 06:02:43| 1|
2019-08-15 23:51:43|2019-11-11 01:43:36| 1|

有人可以解释一下吗?

最佳答案

以下CASE表达式将created_at列与字符串'threshold_time'进行比较:

CASE WHEN txs.created_at >= 'threshold_time' THEN 1 ELSE 0 END

这是一个更正后的工作版本:

SELECT 
CURRENT_TIMESTAMP - INTERVAL 90 DAY AS threshold_time,
txs.created_at,
(CASE WHEN txs.created_at >= CURRENT_TIMESTAMP - INTERVAL 90 DAY
THEN 1 ELSE 0 END) AS chosen
FROM transactions txs;

但实际上在 MySQL 中 bool 表达式默认计算为 0 或 1,因此上面可以简化为:

SELECT 
CURRENT_TIMESTAMP - INTERVAL 90 DAY AS threshold_time,
txs.created_at,
txs.created_at >= CURRENT_TIMESTAMP - INTERVAL 90 DAY AS chosen
FROM transactions txs;

关于mysql - 日期时间和时间戳之间的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58851013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com