Mysql 计算';下一个日期';不同时期
我有一个名为Mysql 计算';下一个日期';不同时期,mysql,sql,Mysql,Sql,我有一个名为checks的表。这会持续几个时期。 为此,支票有一个期限——如每年、每5年或每6个月一次。它们都写为{number}{years/months/weeks} 我需要一个查询,该查询将为我提供未来距离过去(或未来)给定起点最近的检查 下面给出了下一个日期,但它只工作一次。如果您的开始日期是2016/01/01,并且您有6个月的检查和一年的检查,那么您总是会得到底部解决方案的一年检查,因为2017/01/01最接近现在 select `checks`.*, IF(SUBSTRING_I
checks
的表。这会持续几个时期。
为此,支票有一个期限
——如每年、每5年或每6个月一次。它们都写为{number}{years/months/weeks}
我需要一个查询,该查询将为我提供未来距离过去(或未来)给定起点最近的检查
下面给出了下一个日期,但它只工作一次。如果您的开始日期是2016/01/01,并且您有6个月的检查和一年的检查,那么您总是会得到底部解决方案的一年检查,因为2017/01/01最接近现在
select `checks`.*,
IF(SUBSTRING_INDEX(term, ' ', -1) = 'weeks', DATE_ADD('2016-01-01', INTERVAL SUBSTRING_INDEX(term, ' ', 1) week),
IF(SUBSTRING_INDEX(term, ' ', -1) = 'months', DATE_ADD('2016-01-01', INTERVAL SUBSTRING_INDEX(term, ' ', 1) month),
IF(SUBSTRING_INDEX(term, ' ', -1) = 'years', DATE_ADD('2016-01-01', INTERVAL SUBSTRING_INDEX(term, ' ', 1) year), 0)))
as next_date from `checks`
事实上,在写这篇文章的时候,它应该给我6个月的支票——因为这应该发生在2019年1月6日,也就是最接近我现在的日期(2019年5月27日)
有没有办法在查询中确定这一点?这似乎是一种非常糟糕的格式,但我认为您可以做到:
select c.*,
(case when term like '% weeks'
then date('2016-01-01') + interval (substring_index(term, -2) + 0) weeks
when term like '% months'
then date('2016-01-01') + interval (substring_index(term, -2) + 0) month
when term like '% years'
then date('2016-01-01') + interval (substring_index(term, -2) + 0) year
end) as next_date
from checks c
order by next_date asc
limit 1;
谢谢,我同意格式需要改进。然而,这仍然只能将2016/06/01和2017/01/01作为下一个日期,而不是(预计)2019/06/01和2020/01/01。@JoshuaW。您的问题是询问一行(“我需要一个查询,该查询将为我提供未来距离过去(或未来)给定起点最近的支票)。”。我不知道多个值从何而来。第一个值确实是我需要的值,但它必须是6个月期限。我看错了你的答案,忽略了限制部分。您的查询在任何情况下都会返回6个月期限。确切地说,如果我在12月运行这个查询,它应该会再次返回1年检查(这看起来确实是一个糟糕的格式)