gpt4 book ai didi

mysql - MySQL中两个日期列的算术计算

转载 作者:太空宇宙 更新时间:2023-11-03 12:00:40 24 4
gpt4 key购买 nike

我有一张大表(>3000 万行),其中包含有关某种交易的信息。一栏包含交易的完整日期,一栏包含用户的出生年份。

列是:

trans_date 类型为 DATETIME(例如:2006-02-20 00:00:00)

出生 类型为 YEAR(例如:1970)

我想要的是能够在 where 子句中计算交易人员的年龄。例如,2006 - 1970 = 36。那么1970年出生的人在交易当年是36岁。

这就是我想要做的(伪代码):

SELECT name FROM table WHERE (YEAR(trans_date) - birth) = '36'

这样我就可以得到每条记录,该人在交易那一年是 36 岁。这可能吗?

最佳答案

birth > year(trans_date) 处理无符号类型并获得负值时,会发生错误。

您可以通过强制使用带符号的结果来解决这个问题(假设 birth 是无符号值):

WHERE (YEAR(trans_date) - CAST(birth AS SIGNED)) = 36

此外,不要对文字数字使用引号 - 计算返回一个数字,您应该将它与数字进行比较,而不是字符串(这将被隐式转换为数字)。

MySQL 手册指出

By default, subtraction between integer operands produces an UNSIGNED result if any operand is UNSIGNED

这可以通过更改设置来控制:SET sql_mode = 'NO_UNSIGNED_SUBTRACTION

参见 this part of the documentation获取更多信息。

另请注意, 的确定并不准确,因为您缺乏实际确定年龄所需的精度(因为您将日期与年份进行比较,而用户的实际出生时间日期可能在 trans_date 之前或之后)。

关于mysql - MySQL中两个日期列的算术计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29303076/

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