将 Excel 公式(使用日期和减法)转换为 T-SQL
Convert Excel formula (using Date and subtraction) into T-SQL
我正在尝试将此 Excel 公式写入 T-SQL(以编写函数)。
预期输出是 0.71944444,但目前我的输出(使用 T-SQL)是 24.0000。
我不确定为什么我们必须在同一日期上加上一天并减去同一日期。
底部是来自Excel的屏幕截图:
这是我目前在 T-SQL:
CREATE FUNCTION [dbo].[fn_0921] (
@Punch_Start nvarchar(max)
)
RETURNS decimal(36, 8) AS
BEGIN
DECLARE @return_value nvarchar(max);
SET @return_value =
DATEDIFF(
MINUTE, CAST(@Punch_Start AS datetime2),
(
dateadd(
day, 1, CAST(@Punch_Start AS datetime2)
)
)
)
/ (60.0)
RETURN @return_value
END;
感谢您的帮助。
这可能对您有帮助:
DECLARE @date DATETIME2 = '2021-07-25 06:44'
DECLARE @seconds INT = DATEDIFF(second, CAST(@date AS date), @date)
DECLARE @secondsFromEnd FLOAT = 86400 - @seconds
SELECT @secondsFromEnd / 86400
Excel 公式返回单元格 K4 中的日期时间与第二天开始时间(即 7/26/2021 00:00)之间的差值,作为一整天的一部分。以下是 T-SQL 中的等价物:
DECLARE @Punch_Start datetime2 = '7/25/2021 06:44';
SELECT DATEDIFF(
MINUTE,
@Punch_Start,
CAST(
CAST(
DATEADD(DAY, 1, @Punch_Start)
AS date) -- Add 1 day to @Punch_Start & cast as date to remove the time component - this is the start of the next day
AS datetime2) -- Cast back to datetime2 to get the difference in minutes
) / 1440.; -- Divide the difference in minutes by the number of minutes in a day (60 minutes per hour, 24 hours per day) to get the difference as a fraction of a day
我正在尝试将此 Excel 公式写入 T-SQL(以编写函数)。
预期输出是 0.71944444,但目前我的输出(使用 T-SQL)是 24.0000。
我不确定为什么我们必须在同一日期上加上一天并减去同一日期。
底部是来自Excel的屏幕截图:
这是我目前在 T-SQL:
CREATE FUNCTION [dbo].[fn_0921] (
@Punch_Start nvarchar(max)
)
RETURNS decimal(36, 8) AS
BEGIN
DECLARE @return_value nvarchar(max);
SET @return_value =
DATEDIFF(
MINUTE, CAST(@Punch_Start AS datetime2),
(
dateadd(
day, 1, CAST(@Punch_Start AS datetime2)
)
)
)
/ (60.0)
RETURN @return_value
END;
感谢您的帮助。
这可能对您有帮助:
DECLARE @date DATETIME2 = '2021-07-25 06:44'
DECLARE @seconds INT = DATEDIFF(second, CAST(@date AS date), @date)
DECLARE @secondsFromEnd FLOAT = 86400 - @seconds
SELECT @secondsFromEnd / 86400
Excel 公式返回单元格 K4 中的日期时间与第二天开始时间(即 7/26/2021 00:00)之间的差值,作为一整天的一部分。以下是 T-SQL 中的等价物:
DECLARE @Punch_Start datetime2 = '7/25/2021 06:44';
SELECT DATEDIFF(
MINUTE,
@Punch_Start,
CAST(
CAST(
DATEADD(DAY, 1, @Punch_Start)
AS date) -- Add 1 day to @Punch_Start & cast as date to remove the time component - this is the start of the next day
AS datetime2) -- Cast back to datetime2 to get the difference in minutes
) / 1440.; -- Divide the difference in minutes by the number of minutes in a day (60 minutes per hour, 24 hours per day) to get the difference as a fraction of a day