【问题标题】:Set Date Format in Variable在变量中设置日期格式
【发布时间】:2017-03-09 21:34:39
【问题描述】:

只是想知道是否有人可以帮助我为报告设置一个日期变量,以便在每年的特定日期之间运行,而无需手动更新。

例如,我在下面硬编码了日期,但我想知道我是否可以设置一个日期格式,让它进入 2017 年,以便 2017 年的日期发生变化。我想有一种方法可以设置年度日期格式,但我不确定如何。

这是我设置的硬编码变量。 输入错误的日期范围更改如下。

set @start_date =   '2016-01-02';
set @end_date = '2017-01-01';   

下面是我的 where 子句中的内容。

and create_date between  @start_date and  @end_date

【问题讨论】:

标签: mysql sql-server date


【解决方案1】:

给你。

declare @s datetime, @e datetime
set @s=cast(cast(year(getdate()) as char(4))+'-01-02' as date)
set @e=cast(cast(year(getdate()) as char(4))+'-12-31' as date)
select @s,@e

【讨论】:

    【解决方案2】:

    我假设您想要基于“今天”的完整“当前年份”


    MySQL

    select * 
    from whatever
    where ( create_date >= CONCAT(YEAR(CURDATE()),'-01-01')
       and  create_date <  CONCAT(YEAR(CURDATE())+1,'-01-01')
          )
    

    测试它:

    SELECT
      CONCAT(YEAR(CURDATE()),'-01-01')   This_year_start
    , CONCAT(YEAR(CURDATE())+1,'-01-01') Next_year_start
    

    SQL 服务器 (tsql)

    select * 
    from whatever
    where ( create_date >= DATEADD(YEAR, DATEDIFF(YEAR,  0, GETDATE()), 0)
       and  create_date <  DATEADD(YEAR, DATEDIFF(YEAR, -1, GETDATE()), 0)
          )
    

    测试它:

    select
      DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) , 0) This_year_start
    , DATEADD(YEAR, DATEDIFF(YEAR, -1, GETDATE()), 0) Next_year_start
    
        This_year_start     Next_year_start
        01.01.2016 00:00:00 01.01.2017 00:00:00
    
    • DATEDIFF(YEAR, 0, GETDATE()) 从 基准年
    • 将该年数添加到基准日期 (1900-01-01)
    • DATEDIFF(YEAR, -1, GETDATE()) 计算从 基准年的前一年(比上面的数字大 1)
    • 将该年数添加到基准日期 (1900-01-01)

    避免在日期范围内使用between。使用 >= 和 的组合要安全得多

    例如 其中 create_date >= '2016-01-01' 和 create_date

    使用这种方法,无论对 [create_date] 中的数据应用什么时间精度,您都将获得所需信息的精确范围。

    【讨论】:

      【解决方案3】:

      设置@start_date = CAST(CAST(YEAR(getdate()) AS nvarchar(4)) + '0102' AS DATETIME);

      获取当年年末

      SET @end_date = DATEADD(day, -1 , DATEADD(month,13 - MONTH(getdate()), DATEADD(day,1 - DAY(getdate()),getdate())));

      【讨论】:

        【解决方案4】:

        您的范围涵盖一年中的所有日子,1 月 1 日除外。所以你可以简单地检查日期和月份:

        WHERE NOT (DAY(create_date) = 1 AND MONTH(create_date) = 1)
        

        【讨论】:

          猜你喜欢
          • 2017-12-18
          • 1970-01-01
          • 1970-01-01
          • 2022-01-03
          • 1970-01-01
          • 2023-01-20
          • 2018-05-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多