如何在SQL查询中生成两位数的结果集?

如何在SQL查询中生成两位数的结果集?,sql,sql-server-2008,Sql,Sql Server 2008,我有以下查询,但距离中的结果不止一个数字,我希望它只能是两个数字 UPDATE Customer SET Distance = CAST(CAST(REPLACE(REPLACE(distance, 'km' , '' ), 'miles', '')as float) * 1.3 * 0.62137 AS NVARCHAR) + 'Miles' FROM customer 如果我的结果是2.34453433,那么我希望它改为2.3方法: 进近 select Convert(varchar(

我有以下查询,但距离中的结果不止一个数字,我希望它只能是两个数字

UPDATE Customer 
SET Distance = CAST(CAST(REPLACE(REPLACE(distance, 'km' , '' ), 'miles', '')as float) * 1.3 * 0.62137 AS NVARCHAR) + 'Miles' 
FROM customer
如果我的结果是2.34453433,那么我希望它改为2.3方法:

进近

select Convert(varchar(3),convert(numeric(5,1),(2.3434453433)))
解决方案:

方法:

进近

select Convert(varchar(3),convert(numeric(5,1),(2.3434453433)))
解决方案:


如果输入舍入值,则可以使用舍入函数

UPDATE Customer set Distance=
    CAST(round(CAST(REPLACE(REPLACE(distance, 'km' , '' ), 'miles', '')as float) * 1.3 * 0.62137,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)
将数字转换为具有给定长度和精度的指定字符串格式

但是,似乎您真的应该更改Customer表,使其具有一个distance、unit和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)

我不清楚为什么要将值存储为字符串,而不只是在输出中格式化它

你的表达式看起来有点混乱,乘以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)
将数字转换为具有给定长度和精度的指定字符串格式

但是,似乎您真的应该更改Customer表,使其具有一个distance、unit和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)

您能给我一个表中的距离值吗?您可以将数值2,1更改为数值10,1。如果整数部分为2位,则会给出一个错误0.7英里4.45英里1.32英里2.28英里0.99英里0.57英里。。知道了!实际上,它的数值是2.3,英里数是varchar,它试图对这些值求和。现在我已经编辑了我的答案,检查一下。这很有效,但在问题上,如果整数部分是2位的,那么我应该用10,1.你能给我一个表中的距离值吗?你可以将numeric2,1改为numeric10,1。如果整数部分为2位,则会给出一个错误0.7英里4.45英里1.32英里2.28英里0.99英里0.57英里。。知道了!实际上,它的数值是2.3,英里数是varchar,它试图对这些值求和。现在我已经编辑了我的答案,检查它。这是有效的,但在问题上,如果整数部分是2位数,那么我应该用10,1。。