在变量中设置日期格式

Posted

技术标签:

【中文标题】在变量中设置日期格式【英文标题】: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

【问题讨论】:

避免对日期范围使用between,请参阅sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/… 或experts-exchange.com/articles/11210/Beware-of-Between.html 【参考方案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)

【讨论】:

以上是关于在变量中设置日期格式的主要内容,如果未能解决你的问题,请参考以下文章

猫鼬如何在模型中设置日期格式

怎么在excel中设置自定义日期格式

在角度 JS 中设置日期格式

如何在与 SQL 的连接中设置日期格式?

在 SQL 表中设置日期格式 dd/mm/yyyy

以编程方式在小部件中设置 TextClock 的日期格式