【发布时间】:2021-02-21 22:58:01
【问题描述】:
这是我的 SQL Server 代码:
CREATE PROCEDURE [dbo].[usp_GetLeaveDateBewteenStartAndEndDate]
(@UserEmail VARCHAR(100) = NULL,
@FromDate VARCHAR(10) = NULL,
@ToDate VARCHAR(10) = NULL)
AS
BEGIN
--SELECT
--GETDATE() AS [Date]
--,CONVERT(VARCHAR(10),GETDATE(),103) AS ShortDate
--,'Monday' as [DayName]
--,'Full Day' as [Session]
--, 1 as NoOfDays
--,'Work Day' as [Status]
--,'W' as StatusCode
DECLARE @Result AS TABLE
(
Date DATETIME,
ShortDate VARCHAR(50),
DayNames VARCHAR(50),
Session VARCHAR(20),
NoOfDays INT,
Status VARCHAR(50),
StatusCode VARCHAR(2)
)
DECLARE @dayscount INT
SET @dayscount = CAST(DATEDIFF(DAY, CONVERT(DATE, @FromDate, 103), CONVERT(DATE, @ToDate, 103)) AS INT) + 1
DECLARE @daysval INT
SET @daysval = 0
WHILE (@daysval < @dayscount)
BEGIN
INSERT INTO @Result (Date, ShortDate, DayNames, Session, NoOfDays, Status, StatusCode)
VALUES (CONVERT(DATETIME, DATEADD(DAY, @daysval, CONVERT(DATE, @FromDate, 103)), 103), CONVERT(VARCHAR(50), DATEADD(DAY, @daysval, CONVERT(DATE, @FromDate, 103)), 103),
DATENAME(dw, CONVERT(VARCHAR(50), DATEADD(DAY, @daysval, '07/02/2021'), 103)),
'Full Session', 1, 'Work Day', 'W')
SET @daysval = @daysval + 1
DECLARE @daycheck NVARCHAR(100)
SELECT @daycheck = DayNames
FROM @Result
IF (@daycheck = 'sunday')
BEGIN
UPDATE @Result
SET Status = '', StatusCode = ''
END
END
SELECT * FROM @Result
END
在执行我的查询后,我得到了这个结果:
EXEC [dbo].[usp_GetLeaveDateBewteenStartAndEndDate] NULL, '03/02/2021', '05/02/2021'
Date ShortDate DayNames Session NoOfDays Status StatusCode
-----------------------------------------------------------------------
2021-02-03 00:00:00.000 03/02/2021 Sunday Full Session 1
2021-02-04 00:00:00.000 04/02/2021 Sunday Full Session 1
2021-02-05 00:00:00.000 05/02/2021 Wednesday Full Session 1 Work Day W
对于 2021 年 1 月 2 日,daynames 应该是星期一,05/02/2021 应该是星期二。
【问题讨论】:
-
到底为什么要将日期转换为
varchar只是为了将它们传回日期函数,将日期保留为日期。而且您需要学习如何使用计数表/功能。
标签: sql sql-server