Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL选择具有动态日期的大小写_Sql_Sql Server_Case_Getdate - Fatal编程技术网

SQL选择具有动态日期的大小写

SQL选择具有动态日期的大小写,sql,sql-server,case,getdate,Sql,Sql Server,Case,Getdate,我真的不知道如何做我正在寻找的查询,希望有人能帮助我。基本上,我想知道下面这个查询到底做了什么,除了在动态年份中使用它们,这样我就不需要每次年份发生变化时都更新存储过程 SELECT case when Convert(varchar(8), getDate(),1) between '01/01/2013' and '03/31/2013' then '04/01/2013 - 06/30/2013' when Convert(varchar(8), get

我真的不知道如何做我正在寻找的查询,希望有人能帮助我。基本上,我想知道下面这个查询到底做了什么,除了在动态年份中使用它们,这样我就不需要每次年份发生变化时都更新存储过程

   SELECT 
    case 
    when Convert(varchar(8), getDate(),1) between '01/01/2013' and '03/31/2013' then '04/01/2013 - 06/30/2013' 
    when Convert(varchar(8), getDate(),1) between '04/01/2013' and '06/30/2013' then '07/01/2013 - 09/30/2013'
    when Convert(varchar(8), getDate(),1) between '07/01/2013' and '09/30/2013' then '10/01/2013 - 12/31/2013'
    when Convert(varchar(8), getDate(),1) between '10/01/2013' and '12/31/2013' then '01/01/2014 - 03/31/2014'
    end
我想让它像

when Convert(varchar(8), getDate(), 1) between '01/01/currentYear' and '03/31/currentYear' then '04/01/thisyear - 06/30/currentYear'
如果有人能在这方面给我一点帮助,那就太好了。 非常感谢你,
NickG作为参数在当年通过:

DECLARE @YEAR VARCHAR(4)
SET @YEAR = DATEPART(YEAR,GETDATE())

SELECT 
    case 
    when Convert(varchar(8), getDate(),1) between '01/01/'+ @YEAR and '03/31/'+ @YEAR then '04/01/'+@YEAR+' - 06/30/'+@YEAR 
    when Convert(varchar(8), getDate(),1) between '04/01/'+ @YEAR and '06/30/'+ @YEAR then '07/01/'+@YEAR+' - 09/30/'+@YEAR
    when Convert(varchar(8), getDate(),1) between '07/01/'+ @YEAR and '09/30/'+ @YEAR then '10/01/'+@YEAR+' - 12/31/'+@YEAR
    when Convert(varchar(8), getDate(),1) between '10/01/'+ @YEAR and '12/31/'+ @YEAR then '01/01/'+@YEAR+' - 03/31/'+@YEAR
    end

您完全可以不使用
CASE
语句来执行此操作:

SELECT CONVERT(VARCHAR(8),(DATEADD(quarter, 1+DATEDIFF(quarter, 0, GETDATE()), 0)),1)+ ' - ' 
     + CONVERT(VARCHAR(8),(DATEADD(day,-1,DATEADD(quarter, 2+DATEDIFF(quarter, 0, GETDATE()), 0))),1)
要确认它在其他日期有效,请执行以下操作:

DECLARE @date DATE = '2012-12-10'
SELECT CONVERT(VARCHAR(8),(DATEADD(quarter, 1+DATEDIFF(quarter, 0, @date), 0)),1)
        + ' - ' 
        + CONVERT(VARCHAR(8),(DATEADD(day,-1,DATEADD(quarter, 2+DATEDIFF(quarter, 0, @date), 0))),1)

这太完美了,我只需要使用年份(getDate())来获取今年,并将第二个参数设置为year+1。我不是DBA,非常感谢@NickG我已经编辑了我的答案以包含GETDATE()函数,这样你仍然只需要一个参数,你需要在去年的
部分中添加1。当
部分时,应该是明年的第一季度,而不是同一年的第一季度。