gpt4 book ai didi

mysql - 带有 concat 和 adddate 的嵌套 MySQL 查询

转载 作者:行者123 更新时间:2023-11-30 23:23:25 25 4
gpt4 key购买 nike

我正在尝试嵌套一些查询,但到目前为止我收到错误 1242:子查询返回多于 1 行。我需要不止一行,因为我正在处理许多记录。

我有 2 个表。一个开始日期存储在 3 列中; yr_comm、mth_comm、day_comm。第 2 个表具有多个用户的服务期限(以年为单位),以整数(2.71、3.45 等)表示。

我需要使用这个开始日期(来自表 1),加上服务期限(来自表 2)以获得结束日期,但我只需要显示年份。

我有 2 个查询,它们在分开时工作得很好,它们会产生所需的值,但是我无法组合这些查询来获得所需的最终结果。

查询 1:将 3 个开始值连接成日期格式

SELECT concat_ws('-', yr_comm, mth_comm, day_comm) AS date_comm
FROM table 1

查询 2:将整数 yrs_service 转换为天数

SELECT format(yrs_served * 365, 0)  AS days_served
FROM table 2

查询 3:使用 date_add 函数将天数服务添加到开始日期

SELECT date_add(date_comm, INTERVAL days_served DAY) AS date_left

谁能建议我如何实现上述目标?非常感谢。

编辑 - 这是我正在处理的完整查询:

SELECT prime_minister.pm_name, yr_comm, party, ADDDATE(
(SELECT CONCAT_WS('-', yr_comm, mth_comm, day_comm) FROM ministry), INTERVAL
(SELECT FORMAT(yrs_served * 365, 0) FROM prime_minister) YEAR) AS date_left
FROM ministry JOIN prime_minister USING (pm_name)
WHERE party NOT LIKE '%labor%'
AND prime_minister.pm_name = ministry.pm_name
ORDER BY pm_name;

最佳答案

你可以使用用户变量

SET @date = CONCAT_WS('-', 2012,1,1);   -- paste your query here
SET @toAdd = (SELECT MONTH(CURDATE())); -- paste your query here
SELECT DATE_ADD(@date, INTERVAL @toAdd DAY) AS date_left

相同
SET @date = CONCAT_WS('-', 2012,1,1);   -- paste your query here
SET @toAdd = (SELECT MONTH(CURDATE())); -- paste your query here
SELECT @date + INTERVAL @toAdd DAY AS date_left

或者不使用更长的变量,

SELECT (CONCAT_WS('-', 2012,1,1)) + INTERVAL (SELECT MONTH(CURDATE())) DAY AS date_left

关于mysql - 带有 concat 和 adddate 的嵌套 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14492720/

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