使用IF和IN子句获取值

时间:2014-07-07 17:53:37

标签: sql sql-server

日期栏中有数据如:

  

' 2014-03-01',' 2014-05-01',' 2014-07-01' ...

我希望与IF条款有所不同。

例如,如果日期是在'年 - 07-01' 〜'(年+ 1)-06-30',然后返回YEAR,否则返回YEAR-1。

例如,如果日期列的数据如下:

  

' 2000-06-01',' 2000-07-01',' 2005-07-01',' 2005-08- 01',' 2008-07-01'

我想得到1999年',' 2000',' 2005',' 2008'

我在想

SELECT (
IF t.DATE IN YEAR(t.DATE) + '-07-01' AND YEAR(t.DATE)+1 + '-06-30'
THEN YEAR(t.DATE) ELSE YEAR(t.DATE)+1 )
FROM THE_TABLE t WHERE PRIMARY_KEY = 123;

但我不知道如何在SQL Server中正确编写它。

3 个答案:

答案 0 :(得分:2)

在我看来,您正在根据截至6月30日的财政年度开始计算并开始7/1。

试试这个:

select distinct
case when Month(t.DATE) >=7 then Year(t.DATE) else Year(t.DATE)-1 end as FiscalYear
from THE_TABLE t
order by FiscalYear desc

答案 1 :(得分:0)

更好的方法是创建和使用日历表。它不仅更容易使用,而且可以在不同年份灵活使用。

看看这篇文章。 http://www.sqlservercentral.com/articles/T-SQL/70482/

答案 2 :(得分:0)

试试这个

SELECT CASE WHEN CAST(YEAR(t.DATE) + '-07-01' AS DATE) AND CAST((YEAR(t.DATE)+1) + '-06-30' AS DATE)
            THEN YEAR(t.DATE)
       ELSE YEAR(t.DATE)+1
       END AS YearValue
FROM   THE_TABLE t
WHERE  PRIMARY_KEY = 123