在SQL存储过程中将值转换为4位小数

时间:2017-08-27 11:07:39

标签: sql sql-server tsql

我正在计算一个小时分配,这取决于来自不同表格的列值。

假设我来自{2}的hourlyrate和{2} table1。如果rates中的rates = 4其中4代表4位小数,那么根据计算,小时分配值应该给小数点后4位。

这是我的计算:

table2

我应该将值除以得到4dp吗?有什么建议吗?

2 个答案:

答案 0 :(得分:0)

您的转化应该在then之后,而不是在整个case表达式之后。

select 
    ...
  , HourlyRate = case when table2.rates in ('2','4')
          then convert(varchar(32),convert(decimal(18,4),table1.hourlyrate))
      else table1.hourlyrate
      end
    )
from ...

在SQL Server 2012+中,如果转换失败,您可以使用try_convert()代替convert()来返回null值,而不是错误。

select 
    ...
  , HourlyRate = case when table2.rates in ('2','4')
          then convert(varchar(32),try_convert(decimal(18,4),table1.hourlyrate))
      else table1.hourlyrate
      end
    )
from ...

rextester演示:http://rextester.com/KYXEV38143

返回:

+-------+------------+------------+
| rates | hourlyrate | HourlyRate |
+-------+------------+------------+
|     1 | 1.23456789 | 1.23456789 |
|     2 | 1.23456789 | 1.2346     |
|     2 |            | NULL       |
|     3 | 1.23456789 | 1.23456789 |
|     4 | 1.23456789 | 1.2346     |
|     4 | 1          | 1.0000     |
|     4 | N/A        | NULL       |
+-------+------------+------------+

答案 1 :(得分:0)

2012+的另一个选择是使用Format()

示例

Declare @YourTable table (HourlyRate varchar(50),Rate varchar(10)) 
Insert Into @YourTable values
 ('125   ','4')
,('85.25' ,'2')
,('75.1255' ,'')
,('9.33333333' ,'6')


Select format(convert(float,HourlyRate),'0.'+left('0000000',Rate))
 From @YourTable

返回

125.0000
85.25
75
9.333333