2

次のクエリがありますが、距離の結果が 1 桁を超えているため、2 桁のみにしたいです。

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

4

4 に答える 4

1

出力時に値をフォーマットするのではなく、値を文字列として保存する理由がわかりません。

あなたの式は少し混乱しているように見えます.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ただし、距離、単位、および他の 2 つの値を組み合わせた計算列である "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)
于 2013-07-10T10:37:13.370 に答える
1
SELECT 
CAST(CAST(CAST(REPLACE(REPLACE(distance, 'km' , '' ), 'miles', '')as float) * 1.3 * 0.62137 AS DECIMAL(19,1)) AS NVARCHAR) 
+ 'Miles' FROM customer
于 2013-07-10T10:27:41.220 に答える
1

アプローチ :

Approach の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' 
于 2013-07-10T10:24:14.977 に答える
1

ラウンド値の場合、ラウンド関数を使用できます

UPDATE Customer set Distance=
    CAST(round(CAST(REPLACE(REPLACE(distance, 'km' , '' ), 'miles', '')as float) * 1.3 * 0.62137,1) AS NVARCHAR) 
    + 'Miles' FROM customer
于 2013-07-10T10:25:50.480 に答える