gpt4 book ai didi

mysql - 在sql中查找日期范围的最小值和最大值

转载 作者:行者123 更新时间:2023-11-29 20:03:56 25 4
gpt4 key购买 nike

我继承了一个数据库,其中有一列名为“dateRange”。我被要求查找最早/开始和最晚/结束日期。原始数据列如下所示:

dateRange Column

这是我的 sql 查询:

SELECT
@EarliestDate := SUBSTRING_INDEX(`dateRange`,'-',1) as StartingDate,
@LatestDate := SUBSTRING_INDEX(`dateRange`,'-',-1) as EndingDate,
MIN(@EarliestDate) as LowRange,
MAX(@LatestDate ) as HighRange
FROM `dateRangeTable`;

Output from Query

输出显示两列,其中有两个值:1) EarliestDay (01/01) 和 2) LateDay(01/31/15)。

显然,这是不正确的,因为最晚日期应该是 12/31/15,而不是 01/31/2015。

我做错了什么?任何反馈将不胜感激。

最佳答案

@EarliestDate@LatestDate 均存储为字符串,而不是日期。因此 MySQL 将它们作为字符串进行排序,这意味着 MAX 和 MIN 按字母顺序给出第一个和最后一个。

要让 MySQL 正确排序,您需要将字符串转换为 DATE,然后 MAX 和 MIN 将返回最早和最晚的日期。

了解有关如何将文本转换为日期的更多信息 here .

编辑

好的 - 让我们一步一步来。第一步是将每个记录的“开始”和“结束”日期分开,仍然将它们保留为字符串。

请注意,“开始”日期缺少年份,因此我们需要从“结束”日期获取该年份。

这是一个执行此操作的查询:

SELECT dateRange, 
CONCAT(SUBSTRING_INDEX(`dateRange`,'-',1), '/', SUBSTRING_INDEX(`dateRange`,'/',-1)) AS from_date,
SUBSTRING_INDEX(`dateRange`,'-',-1) AS to_date
FROM dateRangeTable;

结果:

enter image description here

下一步 - 将这些字符串转换为日期。好吧,这只是用 STR_TO_DATE 函数将它们包装起来,就像您所做的那样:

SELECT dateRange, 
STR_TO_DATE(CONCAT(SUBSTRING_INDEX(`dateRange`,'-',1), '/', SUBSTRING_INDEX(`dateRange`,'/',-1)), '%m/%d/%y') AS from_date,
STR_TO_DATE(SUBSTRING_INDEX(`dateRange`,'-',-1), '%m/%d/%y') AS to_date
FROM dateRangeTable;

结果:

enter image description here

最后一步 - 查找最早的“开始”日期和最晚的“结束”日期:

SELECT 
MIN(STR_TO_DATE(CONCAT(SUBSTRING_INDEX(`dateRange`,'-',1), '/', SUBSTRING_INDEX(`dateRange`,'/',-1)), '%m/%d/%y')) AS min_from_date,
MAX(STR_TO_DATE(SUBSTRING_INDEX(`dateRange`,'-',-1), '%m/%d/%y')) AS max_to_date
FROM dateRangeTable;

结果:

enter image description here

关于mysql - 在sql中查找日期范围的最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40413090/

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