SQL Server - 案例表达和数字格式

时间:2016-08-11 20:16:15

标签: sql sql-server

我有一个脚本,我有以下案例表达。

正在发生的奇怪事情是SQL会将所有结果转换为Decimal 18,1。甚至是metricid 1记录应该转换为int。

   SELECT CASE 

    WHEN metricid = 1 then cast(result as int)
    WHEN metricid = 2 then cast(result as decimal(18,1)

    END as column1
   from sometable

我甚至添加了类似下面的内容作为第二个不应该评估的条件,因为1不是= 3(对吗?)但它仍然将所有结果转换为十进制:

 WHEN 1=3 and metricid = 2 then cast(result as decimal(18,1) 

我想我打破了SQL:....(

1 个答案:

答案 0 :(得分:4)

SQL在一列中只允许一种数据类型。可能的解决方案可能是将输出转换为VARCHAR。例如,请考虑以下示例:

DECLARE @metricid INT
DECLARE @result INT

SET @metricid = 2 --(or 1)
SET @result = 20

SELECT CASE WHEN @metricid = 1 then CAST(CAST(@result as int) AS VARCHAR(55))
            WHEN @metricid = 2 then  CAST(CAST(@result as decimal(18,1)) AS VARCHAR(55))
            ELSE ''
       END Result
CASE表达式的

The return type是result_expressions中类型集和可选else_result_expression中的最高优先级类型。可以检查数据类型的优先级here

SQL-Server 2012 +

SELECT CASE WHEN @metricid = 1 then FORMAT(@result, '#')
            WHEN @metricid = 2 then FORMAT(@result, '#.0')
            ELSE ''
       END Result