2013-10-03 47 views
2

我需要在每年的7月1日至10月31日之間獲取日期範圍。基於此,我必須更新另一列。獲取每年僅有月和日的日期範圍

日期字段是日期時間。應該是這樣的:

Select Cash = Case When date between '1st July' and '31st October' Then (Cash * 2) End 
From MytTable 

注意:這個範圍應該適用於每一年。

回答

3

這是一種方式:

SELECT Cash = CASE WHEN RIGHT(CONVERT(VARCHAR(8),[date],112),4) 
       BETWEEN '0701' AND '1031' THEN Cash*2 
       ELSE Cash END --I added this 
+0

感謝Lamak ..你的回答是在我的情況下工作..非常感謝! – Ritesh

+2

11月1日至3月1日之間的情況如何?即:'1101'和'0301'之間這是行不通的。我需要一個解決方案,它跨越了一年的變化,但我們不想包括一年,因爲這是一個循環調度程序。也許兩個之間? BETWEEN('1101'和'1231)或('0101'和'0301') –

+0

@ JJ_Coder4Hire如果你需要這個,那麼你可以問一個問題,並確切指定你的要求(哦,並確保首先搜索對於類似的問題) – Lamak

2

對於你的情況,你可以只使用了一個月,並確保它落在7 10.

之間

這是您的查詢將會如何:

select Cash = case when month([Date]) in (7, 8, 9, 10) then (Cash * 2) else Cash end 

select Cash = case when month([Date]) between 7 and 10 then (Cash * 2) else Cash end 
+0

+1,嗯,這比我的回答好得多 – Lamak

+0

感謝Vasanth ..但是我需要確切的一天。如果日是7月4日到10月20日,那麼我應該如何繼續。 – Ritesh

+0

@Ritesh對於這種情況,Lamak解決方案應該很好。 – Vasanth

0

請嘗試這一個:

DECLARE @DT DATE = GETUTCDATE() , @START_DATE VARCHAR(10) = '07-01' , @END_DATE VARCHAR(10) = '10-31' 
SELECT 
CASE 
    WHEN RIGHT(@DT,5) BETWEEN @START_DATE AND @END_DATE 
    THEN 
    (CASH * 2) 
    ELSE 
    'NO MATCH' 
END AS CASH 
1

此解決方案爲我工作以獲得一些按月份和日期重複計劃的主題。它處理跨越多個年例如定於11月1日至3月1日

的項目我的數據存儲這樣的:

ThemeName, StartMonth, StartDay, EndMonth, EndDay 
Christmas, 12,1,12,26 
Winter, 11, 1, 3, 1 
Spring, 3,1,5,1 
Sports, 0,0,0,0 //continuous 

下面是該查詢:

SELECT 
     DISTINCT ThemeName 
    FROM (
     SELECT 
      CASE WHEN EndDate < StartDate AND ((Current Between StartDate AND 1231) OR (Current Between 0101 AND EndDate)) THEN -- span multiple year between dates 
       ThemeName 
      WHEN StartDate < EndDate AND Current Between StartDate AND EndDate THEN -- normal between dates 
       ThemeName 
      WHEN StartDate = 0 AND EndDate = 0 THEN -- continuous 
       ThemeName 
      ELSE 
       'NG' 
      END as ThemeName 
     FROM (
       SELECT 
         ThemeName, StartDate, EndDate, Current 
       FROM (  
         SELECT 
          ThemeName, 
          CAST(Concat(LPAD(CONVERT(StartMonth , CHAR(2)),2,'0'), LPAD(CONVERT(StartDay , CHAR(2)),2,'0')) as DECIMAL) as StartDate, 
          CAST(Concat(LPAD(CONVERT(EndMonth , CHAR(2)),2,'0'), LPAD(CONVERT(EndDay , CHAR(2)),2,'0')) as DECIMAL) as EndDate, 
          CAST(Concat(LPAD(CONVERT(MONTH(CURRENT_DATE) , CHAR(2)),2,'0'), LPAD(CONVERT(DAY(CURRENT_DATE) , CHAR(2)),2,'0')) as DECIMAL) as current 
         FROM 
          companythemeschedules 
         WHERE 
          companyid = 221 
       ) a 

     ) b 
    ) c 
    WHERE 
     ThemeName != 'NG' 
+0

我不是在尋找upvote。剛剛發佈了我的解決方案,因爲我的搜索找到了此頁面,可能有助於其他人訪問此解決方案 –

相關問題