我正在计算一个小时分配,这取决于来自不同表格的列值。
假设我来自{2}的hourlyrate
和{2} table1
。如果rates
中的rates = 4
其中4代表4位小数,那么根据计算,小时分配值应该给小数点后4位。
这是我的计算:
table2
我应该将值除以得到4dp吗?有什么建议吗?
答案 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