【问题标题】:Number of weekdays between two dates - StartDate question [duplicate]两个日期之间的工作日数 - StartDate 问题 [重复]
【发布时间】:2020-06-08 00:15:42
【问题描述】:

我需要计算 StartDate 和 EndDate 之间的工作日数。我使用以下工作正常,但我的 StartDate 需要是表中的“TradeDate”,而不是为 StartDate 设置的特定日期。如何正确更改“SET @StartDate”以选择表中每条记录的“TradeDate”?

Declare @StartDate DATEtime
Declare @EndDate DATEtime
SET
@StartDate = ? ? ?
SET
@EndDate = GETDATE()
SELECT
(DATEDIFF(dd, @StartDate, @EndDate) -1) -(DATEDIFF(wk, @StartDate, @EndDate) * 2) -(
CASE WHEN DATENAME(dw, @StartDate) = 'Sunday' THEN 1 ELSE 0 END
) -(
CASE WHEN DATENAME(dw, @EndDate) = 'Saturday' THEN 1 ELSE 0 END
) as DaysOutstanding,
DealTicketReference,
PortfolioCode
from
tbl
where
StatusId = '1'
and Type = '0'

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    您可以使用SELECT 声明:

    SELECT (DATEDIFF(dd, TradeDate, @EndDate) -1) -
           (DATEDIFF(wk, TradeDate, @EndDate) * 2) -
           (CASE WHEN DATENAME(dw, TradeDate) = 'Sunday' 
                 THEN 1 ELSE 0 
            END) -
           (CASE WHEN DATENAME(dw, @EndDate) = 'Saturday' 
                 THEN 1 ELSE 0 
            END) as DaysOutstanding,
            DealTicketReference, PortfolioCode
    from tbl
    where StatusId = '1' and Type = '0';
    

    如果StatusId & Type 始终具有数值,则不需要制作文字字符串。只要通过StatusId = 1 & Type = 0

    【讨论】:

    • 我试过了,但它无法识别 TradeDate。错误:列名“TradeDate”无效,但 TradeDate 绝对是正确的值。示例:TradeDate 2020-02-04 00:00:00.000
    • @GLOBALJJ。 . .该错误表示您在给定表tbl 中没有TradeDate。因此,请确保 TradeDate 在表格中可用。
    猜你喜欢
    • 1970-01-01
    • 2020-11-20
    • 2018-10-02
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    相关资源
    最近更新 更多