Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中显示开始日期和结束日期的日期列表_Sql - Fatal编程技术网

在SQL中显示开始日期和结束日期的日期列表

在SQL中显示开始日期和结束日期的日期列表,sql,Sql,我需要在SQL中显示日期列表。我已经有了一个单行n个数字代码的输入 以日/月/年格式显示表格结构日期: Code FromDate ToDate Total Days 1 01/03/2012 04/03/2012 4 2 01/04/2012 05/04/2012 5 我需要输出为: Code FromDate 1 01/03/2012 1 02/03/2012 1 03/03/2012 1 04/03/2012 虽然您可以编写代

我需要在SQL中显示日期列表。我已经有了一个单行n个数字代码的输入

以日/月/年格式显示表格结构日期:

Code FromDate   ToDate     Total Days

1    01/03/2012 04/03/2012   4
2    01/04/2012 05/04/2012   5
我需要输出为:

Code FromDate

1    01/03/2012
1    02/03/2012
1    03/03/2012
1    04/03/2012
虽然您可以编写代码来推断日期,例如SQL Server的,但它的CPU占用量很大。如果在很长的时间范围内有大量的记录,那么您正在迭代地构建大量的数据。每次查询数据时都会这样做。到目前为止,CPU效率最高的方法只是拥有另一个表

如果您将数据库看作维度表和事实表,那么开始和结束日期只是隐含时间维度的关键。不是隐式的,而是显式的,并创建一个日历表。那就很琐碎了

SELECT
  yourTable.code,
  calendar.calendar_date
FROM
  yourTable
INNER JOIN
  calendar
    ON  calendar.calendar_date >= yourTable.fromDate
    AND calendar.calendar_date <  yourTable.toDate
这可能会节省大量CPU负载,并大大简化查询

一旦你有了表格,预先填充了所有你需要的日期,许多混乱的日期操作就变成了简单的可索引查找

您甚至可以向该表中添加元数据,例如

每周开始 月初 财政年度 等等等等 有些人批评这是不雅的。我个人的感觉正好相反: -它缓存混乱的基于日期的计算 -它明确地创建了一个维度表


TeraData甚至使用它来获得非常好的效果:sys_calendar.calendar。

使用循环或日期查找表,或者只在前端执行。你试过什么没用的?你自己试过什么吗?你用的是什么数据库引擎?总天数不是多余的吗?您可以为此编写一个过程。在纯SQL中从开始日期和结束日期生成日期列表并不是一件简单的事情。用过程语言更容易实现。我认为反对票并不完全公平。如果他们支持一个重复的问题的话,我会更被接近票数的选票所说服——和以往一样,困难在于找到重复的问题。如果指定了DBMS,这会有所帮助。哎哟,看看这个答案:
SELECT
  yourTable.code,
  calendar.calendar_date
FROM
  yourTable
INNER JOIN
  calendar
    ON  calendar.calendar_date >= yourTable.fromDate
    AND calendar.calendar_date <  yourTable.toDate