私はSQLが初めてで、カーソルを書いた経験がありません。distance
テーブル customer に、次のような値を持つ列名があります
distance
5miles
3km
6miles
null
6km
距離列の各列の数値を読み取り、30% 増加させ、数値全体を 0.62137 で乗算し、列の値を単位マイルに置き換えるカーソルを書きたいと思います。誰かがこれで私を助けてくれませんか。またはアイデアを教えてください。私はそれを修正する必要があります。
私はSQLが初めてで、カーソルを書いた経験がありません。distance
テーブル customer に、次のような値を持つ列名があります
distance
5miles
3km
6miles
null
6km
距離列の各列の数値を読み取り、30% 増加させ、数値全体を 0.62137 で乗算し、列の値を単位マイルに置き換えるカーソルを書きたいと思います。誰かがこれで私を助けてくれませんか。またはアイデアを教えてください。私はそれを修正する必要があります。
簡単なクエリで試すことができます。
SELECT CAST(CAST(REPLACE(REPLACE(distance, 'km' , '' ), 'miles', '')as float) * 1.3 * 0.62137 AS VARCHAR) + ' miles'
FROM customer
ここで、文字列が置き換えられ、値で乗算され、文字列にキャストされて「miles」と連結されます。
実行したい計算や、列の値をマイルに置き換えることの意味が正確にはわかりません。しかし、私はあなたに最初に見せます:
--Your sample data
declare @t table (distance varchar(20) null)
insert into @t (distance) values
('5miles'),('3km'),('6miles'),(null),('6km')
--A possible update
; with Positioned as (
select distance, PATINDEX('%[a-z]%',distance) as FirstLetter from @t
), Converted as (
select distance,FirstLetter,CONVERT(int,SUBSTRING(distance,1,FirstLetter-1)) as Number from Positioned
)
update Converted set distance = CONVERT(varchar(20), Number * 0.6174) + 'miles ' + SUBSTRING(distance,FirstLetter,8000)
select * from @t
これらの結果が生成されます。
distance
--------------------
3.0870miles miles
1.8522miles km
3.7044miles miles
NULL
3.7044miles km
UPDATE
ステートメントでは、文字列の数値部分にアクセスして、に変換しint
(簡単に a にすることもできますfloat
)、元の単位にもアクセスできることに注意してください。それらについて)。
それが現時点で私ができる最善のことです.あなたの質問は、どのような変換が行われるかについて正確にははっきりしていません. だから私は行きました:
アイデアをくれ
Obl Toblの回答を少し改善しました:
UPDATE d
SET
d.dist = CAST(CAST(REPLACE(REPLACE(d1.dist, 'km', ''), 'miles', '') as FLOAT) * 1.3 * 0.62137 AS VARCHAR) + 'miles'
FROM distance d
INNER JOIN distance d1
ON d.id = d1.id