在 SELECT 语句中四舍五入字段的值

Rounding a field's value in a SELECT statement

我需要做的是将一个字段四舍五入到两位小数,但不是以通常的方式。我有一个下拉列表,它总是四舍五入到 2 位小数 (CIT_NBR)。但是,在数据库 table 中,它有时会四舍五入为小数点后一位。所以现在我正在尝试基于此字段创建一个 SELECT 语句,但我的前端将其存储为 2 位小数,而我的后端可以将其存储为 1 位或 2 位小数。别问了,很复杂。 :o)

所以,我想在 "aircode" 中做的是:

SELECT * FROM VW_MOS_DPL_AccountValidation WHERE CUST_NUM = @CNum 
   AND Format(CIT_NBR, 2 decimals) = @CITNum

这样,它强制 table 中的数据使用 2 位小数,因此它可以与我的下拉列表进行比较。

这是我的代码块:

using (SqlConnection con2 = new SqlConnection(str2))
{
    using (SqlCommand cmd2 = new SqlCommand(@"SELECT * FROM VW_MOS_DPL_AccountValidation WHERE CUST_NUM = @CNum AND CIT_NBR = @CITNum", con2))
    {
        con2.Open();

        cmd2.Parameters.AddWithValue("@CNum", TBAccountNum.Text);

        string ddlCITVal2 = ddlCIT.SelectedValue;
        cmd2.Parameters.AddWithValue("@CITNum", ddlCITVal2);

        using (SqlDataReader DT2 = cmd2.ExecuteReader())
        {
            // If the SQL returns any records, process the info
            if (DT2.HasRows)
            {
                while (DT2.Read())
                {
.
.
.
etc

我该怎么做呢?

有一种性能更高的方法,但这种方法最容易阅读和维护,除非它会导致真正的性能问题。

SELECT * 
FROM VW_MOS_DPL_AccountValidation 
WHERE CUST_NUM = @CNum 
  AND (CIT_NBR=@CITNUM OR CIT_NBR+'0'=@CITNUM)

除非你真的想要四舍五入到一位小数而不是你给出的例子只是截断尾随零,在这种情况下需要使用不同的方法。

Cast the varchar to a decimal

SELECT SUM(Cast(CitNum as decimal(8,2))) as CitNum FROM table