首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要一种方法来确定getdate()是否介于使用SQL的特定季节之间

需要一种方法来确定getdate()是否介于使用SQL的特定季节之间
EN

Stack Overflow用户
提问于 2018-12-07 15:51:34
回答 2查看 60关注 0票数 0

我遇到了一个有趣的难题,我需要能够经常在子查询中处理,当然,这也是最便宜的方法。现在我已经解决了这个问题,但我仍然在问这个问题,因为我打赌还有更好的方法?

我有一个季节表非常具体,冬天跳到下一年,这是我的问题。

在我意识到自己犯了一个愚蠢的错误之前,我最初是如何处理这个问题的:

代码语言:javascript
复制
SeasonId | Name   | From       | To
-------------------------------------------
1        | Winter | 1900-12-01 | 1900-02-28
etc.

如前所述,我必须在一致的基础上对此进行查询,并试图保持尽可能简单。在子查询和子句中到处使用这一点:

代码语言:javascript
复制
WHERE datefromparts(1900, month(getdate()), day(getdate())) 
between [From] AND [To]

你看到骨头的错误了吗?冬天的日期是同一年,所以当然现在(这个问题的冬天)所有这些查询都失败了。

因此,为了解决这个问题,我添加了以下列:

  1. Leap tinyint (我将冬季设置为1,其余设置为0)
  2. MonthFrom丁质
  3. DayFrom丁质
  4. MonthTo丁质
  5. DayTo丁质
  6. ComputedFrom (计算列)
  7. ComputedTo (计算列)

ComputedFrom公式如下所示:

代码语言:javascript
复制
(datefromparts(datepart(year,getdate()),[MonthFrom],[DayFrom]))

ComputedTo公式如下所示:

代码语言:javascript
复制
(datefromparts(datepart(year,dateadd(year,[Leap],getdate())),[MonthTo],[DayTo]))

这个查询的概念,以及为什么/如何需要它,逻辑上可以用下面的例子来概括:

代码语言:javascript
复制
SELECT CoatType FROM dbo.Coats 
WHERE getdate() BETWEEN ComputedFrom AND ComputedTo

我把事情弄得太复杂了吗?我需要设置它,忘记它,也许是闰年的一个小变化,或者在那个时候发生什么。

EN

回答 2

Stack Overflow用户

发布于 2018-12-07 15:57:03

您可以进行以下比较:

代码语言:javascript
复制
where ([From] <= [To] and datefromparts(1900, month(getdate()), day(getdate())) 
between [From] and [To]
      ) or
      ([From] >= [To] and datefromparts(1900, month(getdate()), day(getdate())) 
not between [From] and [To]
      ) 
票数 1
EN

Stack Overflow用户

发布于 2018-12-07 16:02:02

如果我正确地理解了这一点,那么看一下这个月就足够了:

代码语言:javascript
复制
DECLARE @dt DATE = GETDATE();

SELECT CASE MONTH(@dt) WHEN 1 THEN 'Winter'
                       WHEN 2 THEN 'Winter'
                       WHEN 3 THEN 'Spring'                      
                       WHEN 4 THEN 'Spring'                       
                       WHEN 5 THEN 'Spring'
                       WHEN 6 THEN 'Summer'
                       WHEN 7 THEN 'Summer'
                       WHEN 8 THEN 'Summer'
                       WHEN 9 THEN 'Autumn'
                       WHEN 10 THEN 'Autumn'
                       WHEN 11 THEN 'Autumn'
                       WHEN 12 THEN 'Winter' END;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53672852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档