我有以下查询,但距离的结果超过一位数,我希望它只为两位数。
UPDATE Customer
SET Distance = CAST(CAST(REPLACE(REPLACE(distance, 'km' , '' ), 'miles', '')as float) * 1.3 * 0.62137 AS NVARCHAR) + 'Miles'
FROM customer
如果我有类似2.3434453433
的结果,那么我希望它更改为2.3
方法:
这里是方法的SQLFiddel演示
select Convert(varchar(3),convert(numeric(5,1),(2.3434453433)))
解决方案:
UPDATE Customer
set Distance= Convert(varchar(3),Convert(Numeric(5,1),
CAST(CAST(REPLACE(REPLACE(distance, 'km' , '' ),
'miles', '')as float) * 1.3 * 0.62137 AS NVARCHAR))) + 'Miles'
SELECT
CAST(CAST(CAST(REPLACE(REPLACE(distance, 'km' , '' ), 'miles', '')as float) * 1.3 * 0.62137 AS DECIMAL(19,1)) AS NVARCHAR)
+ 'Miles' FROM customer
如果您使用舍入值,则可以使用舍入函数
UPDATE Customer set Distance=
CAST(round(CAST(REPLACE(REPLACE(distance, 'km' , '' ), 'miles', '')as float) * 1.3 * 0.62137,1) AS NVARCHAR)
+ 'Miles' FROM customer
我不清楚为什么要将值存储为字符串,而不是在输出时对其进行格式化。
你的表达式似乎有点混乱,乘以1.3,乘以0.62。我想你想要这样的东西:
UPDATE Customer
set Distance = (case when right(distance, 3) = ' km'
then replace(str(cast(left(distance, charindex(' ', distance) - 1),
as float)/0.62137, 6, 1), ' ', '') + 'Miles'
else distance
end)
str()
函数将数字转换为具有给定长度和精度的指定字符串格式。
然而,您似乎真的应该更改Customer
表,使其具有一个距离、一个单位和一个"DistanceMiles"字段,该字段是将其他两个值组合在一起计算的列。它可能类似于:
DistanceMiles as (case when Units = 'Mile'
then replace(str(Distance, 6, 1), ' ', '')+' Miles'
when Units = 'km'
then replace(str(Distance/0.62137, 6, 1), ' ', '')+' Miles'
end)