在SQL中显示开始日期和结束日期的日期列表
我需要在SQL中显示日期列表。我已经有了一个单行n个数字代码的输入 以日/月/年格式显示表格结构日期:在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 虽然您可以编写代
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