基于sql server 2005中的别名获取财政年度开始日期和结束日期

基于sql server 2005中的别名获取财政年度开始日期和结束日期,sql,sql-server,date,select,Sql,Sql Server,Date,Select,我有一个包含两列的表,一列是月份,另一列是年份。基于这两个栏目,我需要该财政年度的所有记录。例如,如果月份是10年,年份是2014年,那么其财政年度当然是2014财年至2015财年 如何编写SQL select查询,以获取该表中基于月份和年份在FY 01stApr14-31stMar15之间创建的所有记录 我正在尝试下面的查询,但得到的错误消息是“关键字”和“附近的语法不正确” with cte as ( select id,iono,iomonth,ioyear, conver

我有一个包含两列的表,一列是月份,另一列是年份。基于这两个栏目,我需要该财政年度的所有记录。例如,如果月份是10年,年份是2014年,那么其财政年度当然是2014财年至2015财年

如何编写SQL select查询,以获取该表中基于月份和年份在FY 01stApr14-31stMar15之间创建的所有记录

我正在尝试下面的查询,但得到的错误消息是“关键字”和“附近的语法不正确”

with cte as
(
select id,iono,iomonth,ioyear,
        convert(datetime,'01/'+right('00' + convert(varchar(10),iomonth,2),2) 
        + '/' +convert(varchar(4),IOyear),103) as FinDate from iodetails where iono=12345
)
select month(findate),* from cte where iono=12345 and
findate between 
case 
when month(findate)>=4 
then  convert(datetime,'01/'+'04'+ '/' +convert(varchar(4),IOyear),103) and 
        convert(datetime,'31/'+ '03' + '/' +convert(varchar(4),IOyear+1),103)
        else
 convert(datetime,'01/'+'04'+ '/' +convert(varchar(4),IOyear),103)  and 
    convert(datetime,'31/'+ '03' + '/' +convert(varchar(4),IOyear),103)
            end

如果我正确理解您的要求,您可以尝试以下方法:

SELECT * FROM mytable
 WHERE year(dateadd(q, -1, mydate)) = 2014
SELECT * FROM mytable
  WHERE year(dateadd(q, -1, cast(cast(mymonth AS char) + '/01/' + cast(myyear AS char) AS datetime))) = 2014
这将从
mydate
的值中减去1个季度(3个月)并提取年份。因此,在减法后,2015年3月31日<代码>变为2014年12月31日<代码>,提取年份时为2014年

很抱歉,我看到你有两个专栏,月份和年份。在这种情况下,您可以尝试以下方法:

SELECT * FROM mytable
 WHERE year(dateadd(q, -1, mydate)) = 2014
SELECT * FROM mytable
  WHERE year(dateadd(q, -1, cast(cast(mymonth AS char) + '/01/' + cast(myyear AS char) AS datetime))) = 2014
然而,这可能不是最有效的方法

根据我的评论更新

以下是如何在表上创建计算列:

ALTER TABLE mytable
  ADD mydate AS cast(cast(mymonth AS char) + '/01/' + cast(myyear AS char) AS datetime)
试试这个:

SELECT * 
FROM tableA 
WHERE CAST((CAST(YearCol AS VARCHAR(10)) + (CAST(MonthCol AS VARCHAR(10))) AS INT) 
      BETWEEN CAST((CASE WHEN @V_Month BETWEEN 4 AND 12 THEN CAST((CAST(@V_Year AS VARCHAR(10)) + '04') AS INT) 
                         WHEN @V_Month BETWEEN 1 AND 3 THEN CAST((CAST(@V_Year - 1 AS VARCHAR(10)) + '04') AS INT) 
                         ELSE '' 
                     END
                   ) AS INT)
        AND CAST((CASE WHEN @V_Month BETWEEN 4 AND 12 THEN CAST((CAST(@V_Year + 1 AS VARCHAR(10)) + '03') AS INT) 
                       WHEN @V_Month BETWEEN 1 AND 3 THEN CAST((CAST(@V_Year AS VARCHAR(10)) + '03') AS INT) 
                       ELSE '' 
                  END
                 ) AS INT);

表中没有日期字段。只有月份、年份和一些附加字段。我尝试将日期作为别名连接并获取,但如何在别名上写入条件并获取结果财务年度的所有记录。如果执行子查询,则可以在别名上写入条件。但也许更好的选择是创建一个计算列,根据月份和年份计算日期?现在我尝试在alias上使用CTE for condition,因为我们无法更改表。问题中提到的代码。但是获取错误“关键字“between”附近的语法不正确”。获取错误消息为“关键字附近的语法不正确”和。