2009-02-05 60 views
2

我試圖將缺課日期分配到學年,學年是8月1日到7月31日。t-sql將學年分配到學年

所以,我想應該是:
31/07/2007 = 2006/2007
2007年2月10日2007/2008 =
08/01/2008 = 2007/2008

是否有一種簡單的方法在sql 2000服務器中執行此操作。

回答

6

用更少的字符串處理的變型

SELECT 
    AbsenceDate, 
    CASE WHEN MONTH(AbsenceDate) <= 7 
    THEN 
     CONVERT(VARCHAR(4), YEAR(AbsenceDate) - 1) + '/' + 
     CONVERT(VARCHAR(4), YEAR(AbsenceDate)) 
    ELSE 
     CONVERT(VARCHAR(4), YEAR(AbsenceDate)) + '/' + 
     CONVERT(VARCHAR(4), YEAR(AbsenceDate) + 1) 
    END AcademicYear 
FROM 
    AbsenceTable 

結果:

2007-07-31 => '2006/2007' 
2007-10-02 => '2007/2008' 
2008-01-08 => '2007/2008' 
1

應該以這種方式工作:

select case 
    when month(AbsenceDate) <= 7 then 
     ltrim(str(year(AbsenceDate) - 1)) + '/' 
       + ltrim(str(year(AbsenceDate))) 
     else 
     ltrim(str(year(AbsenceDate))) + '/' 
       + ltrim(str(year(AbsenceDate) + 1)) 
     end 

例子:

set dateformat ymd 
declare @AbsenceDate datetime 
set @AbsenceDate = '2008-03-01' 
select case 
    when month(@AbsenceDate) <= 7 then 
     ltrim(str(year(@AbsenceDate) - 1)) + '/' 
       + ltrim(str(year(@AbsenceDate))) 
     else 
     ltrim(str(year(@AbsenceDate))) + '/' 
       + ltrim(str(year(@AbsenceDate) + 1)) 
     end 
1

如下您可以創建一個功能:

CREATE FUNCTION dbo.GetAcademicYear(@in DATETIME) 
RETURNS VARCHAR(10) AS 
BEGIN 
    DECLARE @out VARCHAR(10) 

    IF (MONTH(@in) > 7) 
     SET @out = CAST(YEAR(@in) AS VARCHAR) + '/' + CAST((YEAR(@in) + 1) AS VARCHAR) 
    ELSE 
     SET @out = CAST((YEAR(@in) - 1) AS VARCHAR) + '/' + CAST(YEAR(@in) AS VARCHAR) 

    RETURN(@out) 
END 

然後只是把它叫做:

SELECT dbo.GetAcademicYear('31 July 2007') 

SELECT col1, col2, dbo.GetAcademicYear(date_col) AS academic_year, col3, etc 
FROM my_table 

1

也許你可以考慮創建一個AcademicYear表,如下所示:

CREATE TABLE AcademicYear (
    AcYear VARCHAR(9) 
, FromDate DATE, 
, ToDate DATE) 

並相應地填充它。然後你的查詢可能成爲

SELECT 
    AbsenceDate, 
    AcYear 
FROM 
    AbsenceTable JOIN AcademicYear ON AbsenceDate BETWEEN FromDate AND ToDate 

作爲一個額外的好處,如果一年的開始和結束應該改變,這是一個數據的變化,而不是一些可怕的擴展UDF。

1

我會建議創建一個日曆表。它將包括在可預見的將來(和過去)的所有日期以及您需要的那些日期的任何信息 - 例如它所屬的學年。然後,您還可以添加諸如是否假期,週末等。

無論何時您需要任何類型的查詢,就可以輕鬆加入您的日曆表。