簡體   English   中英

SQL 服務器 datediff 和十進制舍入到偶數

[英]SQL Server datediff and decimal rounding to even number

我正在使用datediff來獲取 2 組或更多組日期aDateStartaDateEnd之間的差值之和。 結果應該是 7.75,但問題是它舍入到 7.00 並將其存儲在Decimal(9,2)數據庫列中,除以 60 部分之后。 如果我從 SQL 查詢中去掉“/60”,結果是 465.00,在幾分鍾內是正確的,但我希望數據庫存儲 7.75

我得到了正確的秒數,但是當我除以 60 時,它會四舍五入到 7.00。

數據:

orderId    AdminId       aStartDate                 aEndDate
-----------------------------------------------------------------------
1          1        2021-04-02 08:00:00.000     2021-04-02 11:30:00.000
1          1        2021-04-02 08:00:00.000     2021-04-02 12:15:00.000

存儲過程的相關部分:

ALTER PROCEDURE [dbo].[sp_updateManagerStatus]
    @AdminId int,
    @OrderId int,
    @Id int,
    @Count1 decimal(9,2) OUTPUT

    SELECT 
        @Count1 = SUM(DATEDIFF(MINUTE, aStartDate, aEndDate) / 60) 
    FROM
        Assignment  
    WHERE
        OrderId = @OrderId AND AdminId = @AdminId
BEGIN
    UPDATE JobSite 
    SET SiteActualTime = @Count1 
    WHERE Id = @Id AND AdminId = @AdminId
END

vb.net代碼的相關部分:

cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add(New SqlParameter("@AdminId", Variable.ToString()))                    
cmd.Parameters.Add(New SqlParameter("@OrderID", Request.QueryString("OrderNo")))
cmd.Parameters.Add(New SqlParameter("@Id", JobSiteIdlbl.Text))
 Dim parameter As SqlParameter = New SqlParameter("@Count1", SqlDbType.Decimal)
      parameter.IsNullable = True
      parameter.Precision = 9
      parameter.Scale = 2
      parameter.Direction = ParameterDirection.Output
      cmd.Parameters.Add(parameter)
con.Open()
rowsaffected = cmd.ExecuteNonQuery()

您可能正在那里執行 integer 分區。 您可能需要將至少一個(可能兩個)值轉換為decimal類型以獲得decimal結果。

CONVERT(decimal(9,2), DATEDIFF(MINUTE, aStartDate, aEndDate)) / CONVERT(decimal(9,2), 60)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM