【问题标题】:Teradata Determine First Day of YearTeradata 确定一年的第一天
【发布时间】:2013-08-28 20:09:19
【问题描述】:

有没有办法在 Teradata SQL 中确定一年的第一天?

例如,我用它来查找一个月的第一天:

SELECT dt + (1 - EXTRACT(DAY FROM dt)) AS dt

我知道我可以使用YEAR() 直接提取年份,但我想将结果输出为日期,以便在一些外部图表中使用。

我试过了,但它在日期的开头添加了一堆空格:

CONCAT(YEAR(dt),'-01-01')

【问题讨论】:

    标签: sql teradata


    【解决方案1】:

    dnoeth 的方法对于工作的长期优化来说很酷,但是,在我看来,简单的答案是 Jeffrey 的方法或以下方法。不确定哪一个使用的资源更少:

    select cast(extract(year from current_date)||'0101' as date format 'yyyymmdd');
    

    【讨论】:

      【解决方案2】:

      简洁优雅 TRUNC(current_date, 'Y')

      【讨论】:

        【解决方案3】:

        想通了:

        ADD_MONTHS(dt, -(EXTRACT(MONTH FROM dt) - 1)) + (1 - EXTRACT(DAY FROM dt))
        

        【讨论】:

          【解决方案4】:

          最高效的方式是基于内部存储,可以轻松放入SQL-UDF:

          REPLACE FUNCTION first_day_of_year(yr INTEGER)
          RETURNS DATE
          SPECIFIC first_day_of_year_INT
          RETURNS NULL ON NULL INPUT
          CONTAINS SQL
          DETERMINISTIC
          COLLATION INVOKER
          INLINE TYPE 1
          RETURN 
             (yr - 1900) * 10000 + 101 (DATE)
          ;
          REPLACE FUNCTION first_day_of_year(cdate DATE)
          RETURNS DATE
          SPECIFIC first_day_of_year_DT
          RETURNS NULL ON NULL INPUT
          CONTAINS SQL
          DETERMINISTIC
          COLLATION INVOKER
          INLINE TYPE 1
          RETURN 
             first_day_of_year(EXTRACT(YEAR FROM cdate))
          ;
          

          编辑:

          自 TD14.10 以来,TRUNC(dt, 'Y')

          【讨论】:

            【解决方案5】:

            试试这个。

            选择日期- dayofyear(date)+1

            【讨论】:

              猜你喜欢
              • 2012-06-20
              • 2020-04-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-08-19
              • 1970-01-01
              相关资源
              最近更新 更多