【问题标题】:Calendar table in SQLSQL 中的日历表
【发布时间】:2012-07-19 14:01:31
【问题描述】:

如何在 oracle SQL 中创建包含单列日期数据类型的表,该表包含从 2000 年 1 月 1 日到今天的所有日期

【问题讨论】:

  • 您使用的是什么 DBMS? What have you tried?这听起来像是作业,如果是的话,应该这样标记。
  • 使用 CREATE table 语句创建表,在您的客户端代码(例如 Java 程序)中编写一个循环来插入您需要的所有日期值。
  • 你可以从sqlteam.com/forums/topic.asp?TOPIC_ID=58479找到答案。只需谷歌“获取 sql 中两个日期之间的所有日期”

标签: sql oracle


【解决方案1】:

您可以使用Oracle row generator

 insert into your_table ( your_column )
 select 
    to_date('2000/01/01', 'yyyy/mm/dd') + N.n
 from
  (SELECT ROWNUM n
   FROM   ( SELECT 1 just_a_column
         FROM   dual
         CONNECT BY LEVEL <= 
               SYSDATE
               - to_date('2000/01/01', 'yyyy/mm/dd') 
               + 1
           ) T
  ) N
  where
      to_date('2000/01/01', 'yyyy/mm/dd') + N.n <= SYSDATE

【讨论】:

    【解决方案2】:

    由于您的问题不清楚,我假设您想要这样。

    SQL 服务器平台。

    CREATE table mycalender
    (
    mydate date
    );
    
    declare @startdate as date = '2000-01-01'
    
    WHILE(@startdate!=DATEADD(D, 0, DATEDIFF(D, 0, GETDATE())))
    begin
    insert into mycalender VALUES(@startdate)
    set @startdate=dateadd(day,1,@startdate)
    end
    

    【讨论】:

      【解决方案3】:

      如果这是 MS SQL Server,试试这个:

      DECLARE @DateFrom DATETIME = '20000101';
      DECLARE @DateTo DATETIME = GETDATE();
      
      WITH Dates(date)
      AS
      ( 
      SELECT @DateFrom 
      UNION ALL
      SELECT DATEADD(day,1,Dates.date) FROM Dates WHERE Dates.date < DATEADD(DAY, -1, @DateTo)
      )
      
      SELECT * FROM Dates OPTION (MAXRECURSION 5000);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-31
        • 1970-01-01
        • 2020-12-16
        • 2021-10-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多