我試圖將這個計算從Excel模擬到T-SQL中。
第一個值是 "7/25/2021 6:44:00 AM"
第二個值是 "7/25/2021 1:10:00 PM"
。我想得出的值是0.35138.
在 SQL 表中,這兩個值目前都是 nvarchar(max) 資料型別。
我正試圖撰寫SQL函式,但我被轉換或鑄造的程序所困,并對兩個值進行計算。
到目前為止,這是我所擁有的:
CREATE FUNCTION [dbo]. [fn_break_cal] (
@Punch_Start nvarchar(max)。
@Punch_End nvarchar(max)
)
RETURNS nvarchar(max) AS
BEGIN
DECLARE @return_value nvarchar(max)。
SET @return_value =
CONVERT(varchar, @Punch_Start, 103)
RETURN @return_value
首先,我不確定在轉換為日期或資料時間后如何做減法。
如果我使用Datediff,輸出是Integer,我不確定如何把它變成數字,比如(0.35133...)。
什么是處理來自nvarchar(max) --> 計算日期/日期時間的資料的最佳方法?
提前感謝。
uj5u.com熱心網友回復:
DECLARE @ps nvarchar(30) = '7/25/2021 6: 44:00 AM'
DECLARE @pe nvarchar(30) = '7/25/2021 15:10:00 PM'
SELECT
DATEDIFF(MINUTE, TRY_CONVERT(datetime, @ps), TRY_CONVERT(datetime, @pe) / (24 * 60.0) AS 分數
SELECT[/span]>
LEFT(CONVERT(time, TRY_CONVERT(datetime, @pe) - TRY_CONVERT(datetime, @ps) ), 5) AS ' hr : mm '
--超過24小時。
DECLARE @ps nvarchar(30) = ' 7/25/2021 6:44:00 AM'
DECLARE @pe nvarchar(30) = '7/27/2021 15:10:00 PM'
SELECT
CONCAT((DATEDIFF(MINUTE, TRY_CONVERT(datetime, @ps), TRY_CONVERT(datetime, @pe) / 60)。)
':',
(DATEDIFF(MINUTE, TRY_CONVERT(datetime, @ps), TRY_CONVERT(datetime, @pe) % 60) ) ' hr : mm ')
uj5u.com熱心網友回復:
請參考下面添加的函式和函式呼叫。 我不清楚為什么你在函式中回傳nvarchar(max)值。我把它改成了十進制。我使用CAST將nvarchar轉換為datetime,你也可以使用TRY_CAST。
ALTER FUNCTION [dbo]. [fn_break_cal] (
@Punch_Start nvarchar(max),
@Punch_End nvarchar(max)
)
RETURNS decimal(36, 8) AS
BEGIN[/span
DECLARE @return_value nvarchar(max)。
SET @return_value = DATEDIFF(MINUTE, CAST(@Punch_Start AS datetime2) , CAST(@Punch_End AS datetime2) ) / (24* 60.0)
RETURN @return_value
END _value
帶有引數和回傳值的函式呼叫:
Select [dbo]. [fn_break_cal] ('7/25/2021 6:44:00 AM','7/25/2021 15:10:00 PM') return_value
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/328419.html
標籤:


