当前位置: 首页 > 面试题库 >

从日期范围生成天

岳池暝
2023-03-14
问题内容

我想运行一个查询

select ... as days where `date` is between '2010-01-20' and '2010-01-24'

并返回如下数据:

天
----------
2010-01-20
2010-01-21
2010-01-22
2010-01-23
2010-01-24

问题答案:

此解决方案不使用 循环,过程或临时表 。子查询会生成最近10,000天的日期,并且可以扩展为任意向前或向后的日期。

select a.Date 
from (
    select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a) ) DAY as Date
    from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as d
) a
where a.Date between '2010-01-20' and '2010-01-24'

输出:

Date
----------
2010-01-24
2010-01-23
2010-01-22
2010-01-21
2010-01-20

性能说明

在这里对其进行测试,其性能令人惊讶地良好:
上面的查询花费了0.0009秒。

如果我们扩展子查询以生成近似值。100,000个数字(因此约有274年的日期),运行时间为0.0458秒。

顺便说一句,这是一种非常可移植的技术,该技术可以在大多数数据库中进行细微调整。

SQL Fiddle示例返回1,000天



 类似资料:
  • 问题内容: 我想运行一个查询 并返回如下数据: 问题答案: 此解决方案不使用 循环,过程或临时表 。子查询会生成最近10,000天的日期,并且可以扩展为任意向前或向后的日期。 输出: 性能说明 在这里对其进行测试,其性能出奇地好: 上面的查询花费了0.0009秒。 如果我们扩展子查询以生成近似值。100,000个数字(因此约有274年的日期),运行时间为0.0458秒。 顺便说一句,这是一种非常可

  • 问题内容: 源表如下: 我想得到以下输出: 我必须使用循环来填充此表吗? 谢谢 问题答案: 您可以使用技巧来查询 演示

  • 问题内容: 我需要填充一个表,该表将存储2个给定日期之间的日期范围:09/01/11-10/10/11 因此,在这种情况下,该表将从2011年9月1日开始存储,直到每天存储到10/10/11,我想知道在SQL Server中是否有一种巧妙的方法-我目前正在使用SQL Server 2008 。 谢谢 问题答案: 在SQL 2005+上很容易;如果您有数字表或理货表,操作会更容易。我在下面伪造了它:

  • 本文向大家介绍java生成指定范围的随机日期,包括了java生成指定范围的随机日期的使用技巧和注意事项,需要的朋友参考一下 有这样一个需求:构造一个方法,随机生成1990-12-31 00:00 00到 2013-12-31 00:00:00之间任意一个时间点。 思路是这样:在javaAPI中 Date类型和long类型很好转化,所以我们可以把问题转化为,求两个long类型数之间的任意值。 同时需

  • 问题内容: 我想将日期范围划分为各个月份。 例如-我有一个以以下方式包含数据的视图: 我希望能够以这种方式显示以上数据: 有人可以帮我吗? 问题答案: 下面的查询应该可以解决问题。该(该条款)动态生成一些月份的数据,我们可以使用它来加入反对。

  • 问题内容: 在MySQL中,如果我有日期范围的列表(范围开始和范围结束)。例如 我想检查另一个日期范围是否包含列表中已经存在的任何范围,我该怎么做? 例如 问题答案: 这是一个经典问题,如果您逆转逻辑,实际上会更容易。 让我举一个例子。 我将在此处发布一个时间段,以及其他时间段的所有不同变体以某种方式重叠。 另一方面,让我发布所有不重叠的内容: 因此,如果您简单地将比较简化为: 那么您将找到所有不