【问题标题】:Create a function which will return 4 output columns创建一个将返回 4 个输出列的函数
【发布时间】:2015-12-03 11:18:47
【问题描述】:

创建表holiday master,其列名称为假日日期、日期(星期日、星期一或任何公共假日)。

创建一个函数,该函数将返回 4 个输出列:日期、月中日、年和日。 日期将是两个日期之间的工作日期(忽略假期主表中的日期)

CREATE function DATENEWww
AS 
BEGIN
DECLARE @StartDate DATETIME
DECLARE @MIDDLEDATE DATETIME
DECLARE @EndDate DATETIME
SET @StartDate = '2013/05/01'
SET @EndDate = '2013/05/10'

SELECT getday()'Day', getDATE() 'Today', YEAR(GETDATE()) 'YEAR Part'
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)
  -(CASE WHEN DATENAME (DW, @MIDDLEDATE)='SELECT HOLIDAY_DATE FROM HOLIDAY_MASTER' THEN 1 ELSE 0 END)

  END

【问题讨论】:

  • 我已经用一些代码试过了,但没有得到结果
  • 标记使用的 dbms,因为它们中的大多数在 PSM(又名存储过程)方面远不符合 ANSI SQL。
  • 你怎么期望我们做你的工作/学业。 (要么你从我们的工作中获得报酬,要么你什么都学不到......)
  • 不,事实并非如此......我已经尝试过代码......它无法正常工作
  • 发布您尝试过的代码、示例数据、所需的输出。

标签: sql-server tsql


【解决方案1】:

使用表格函数:

CREATE FUNCTION [dbo].[CalculateNumberOFWorkDays] (@StartDate datetime, @EndDate datetime)
RETURNS RETURNS @Results TABLE (
    [Date]         datetime,
    [DayOfMonth]   int,
    [Year]         int,
    [Day]          int
)
AS BEGIN

SET @StartDate = DATEADD(dd, DATEDIFF(dd, 0, @StartDate), 0) 
SET @EndDate = DATEADD(dd, DATEDIFF(dd, 0, @EndDate), 0) 

DECLARE @WORKDAYS INT
SELECT @WORKDAYS = (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)


INSERT @Results ([Date], [DayOfMonth], [Year], [Day])
SELECT <your query here>

RETURN 
END

【讨论】:

  • 请看我没有样本数据。我需要做的就是显示四列天、日期、年和任意两个日期之间的天数。
  • 你可以考虑任意两个日期
  • 你计算日期并将它们作为列插入@Results 表中。然后使用查询列: select * from dbo.CalculateNumberOfWorkDays(@StartDate, @EndDate)
猜你喜欢
  • 2014-10-15
  • 2019-04-14
  • 2018-04-07
  • 2021-12-17
  • 2016-10-12
  • 2011-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多