2014-03-04 96 views
0

我有如下表:獲取日期逗號分隔

CREATE TABLE dbo.Test 
(
    Name  NVARCHAR(50) 
    ,StartDate DATE 
    ,EndDate DATE 
) 

INSERT INTO dbo.Test VALUES('ABC','28-Feb-14','03-Mar-14') 
INSERT INTO dbo.Test VALUES('DEF','04-Mar-14','04-Mar-14')  

基本上,這包含假期開始和結束日期爲給定的用戶。我期待如下所示的輸出。

預期輸出:假

Name | WorkHour| LeaveHour | Remarks 
    ------------------------------------- 
ABC | 27 |  18 | 28-Feb, 03-Mar 
DEF | 36 |  9 | 04-Mar 

1天相當於9小時工作周指的是週五到下週四。在這種情況下,將從2月28日至3月6日。

WorkHour指的是用戶限制葉子和不包括週末的小時數。

LeaveHour指的是用戶離開的小時數。

'備註'是指用戶在StartDate和EndDate值之間應以逗號分隔的不同葉子。

我能夠得到的工作時間(包括不希望週末),離開小時值,但發現它有言論和價值,不包括週末

SELECT  
    RN.Name 
    ,ISNULL(45 - ((DATEDIFF(DD, VT.StartDate, VT.EndDate) + 1) * 9), 0) AS 'WorkHours' 
    ,ISNULL(((DATEDIFF(DD, VT.StartDate, VT.EndDate) + 1) * 9), 0) AS 'LeaveHours' 
    --distinct leave dates seperated by comma should be displayed as remarks 
FROM   
    Test VT 
LEFT JOIN 
    ResourceNames RN ON VT.UserId = RN.UserId 

誰能幫助困難嗎?

+1

也許這將幫助你:http://stackoverflow.com/questions/252519/count-work-days-between-two-dates – Boklucius

+0

作品完美。備註欄怎麼樣?有關獲取它的任何提示? – VKarthik

+0

在另一個表中沒有註釋(通過用戶ID加入) – Boklucius

回答

0

這應該不是SQL來完成,但這裏是將做一個功能你想要什麼:

create function CSVDates (@startDate datetime, @endDate datetime) 
returns nvarchar(4000) 
as 
begin 
    declare @csv nvarchar(4000) = '' 
    declare @maxDays int = DATEDIFF(DD, @startDate, @endDate) 
    declare @count int = 0 
    declare @date datetime 
    while(@count <= @maxDays) 
    begin 


     if (DATENAME(dw, @date) = 'Saturday' OR DATENAME(dw, @date) = 'Sunday') 
     BEGIN 
      set @count = @count + 1 
      CONTINUE 
     END 

     set @date = DATEADD(d,@count, @startDate) 
     if (len(@csv) > 0) set @csv = @csv + ',' 
     set @csv = @csv + DATENAME(day,@date) + '-' + DATENAME(month,@date) 

     set @count = @count + 1 

    end 
    return @csv 
end 

把它插入到你的選擇爲CSVDates(vt.StartDate, vt.EndDate) 如果你在,爲nvarchar之間有很多的日期(4000)可能是不夠的...

+0

謝謝。簡單而優雅。不知道我是如何錯過的。 – VKarthik

+0

這對於2014-04-11和2014-04-15給出的startdatetime和enddatetime不起作用。任何想法,我哪裏錯了? – VKarthik

0

我知道出了什麼問題,最後我有時間去處理這個問題。基本上週末的塊不允許日期增加,導致數據不顯示。

這裏是有人找類似的工作代碼問

create function CSVDates (@startDate datetime, @endDate datetime) 
returns nvarchar(4000) 
as 
begin 
    declare @csv nvarchar(4000) = '' 
    declare @maxDays int = DATEDIFF(DD, @startDate, @endDate) 
    declare @count int = 0 
    --assign start date 
    declare @date datetime = @startDate 
    while(@count <= @maxDays) 
    begin 

    if (DATENAME(dw, @date) = 'Saturday' OR DATENAME(dw, @date) = 'Sunday') 
    begin 
      --do nothing 
      set @count [email protected] 
    end  
    else 
    begin 
     if (len(@csv) > 0) 
      set @csv = @csv + ',' 

     set @csv = @csv + DATENAME(day,@date) + '-' + SUBSTRING(DATENAME(month,@date),1,3) 
    end 

     set @count = @count + 1  
     set @date = DATEADD(d,@count, @startDate) 

    end 
    return @csv 
end