SQL等效于C#中的Math.Floor()

时间:2011-09-23 12:26:53

标签: sql sql-server sql-server-2008

我只想根据以下查询中的某些条件将10.111转换为10

Select 
    case when 2=1 then
        CONVERT(decimal(10,3), 10.111)
    else
        CONVERT(decimal(10,0), 10.111)
    end

但它返回10.000 我怎么能得到10?

1 个答案:

答案 0 :(得分:8)

CASE表达式作为一个整体必须全部评估为相同的数据类型。让一个分支评估为decimal(10,3)而另一个分支评估为不同数据类型的唯一方法是对sql_variant进行强制转换

Select 
    case when 2=1 then
        CONVERT(decimal(10,3), 10.111)
    else
        CAST(FLOOR( 10.111) AS SQL_VARIANT)
    end