我是sql的新手,没有编写游标的经验。
我的表customer中有一个列名distance
,其值为
distance
5miles
3km
6miles
null
6km
我想写一个游标,读取距离列的每个列数值 并且增加30%并将整数乘以0.62137并用单位里程替换列值。 有些人可以帮助我。或者给我一个想法,我迫切需要解决它。
答案 0 :(得分:2)
您可以使用简单的查询进行尝试:
SELECT CAST(CAST(REPLACE(REPLACE(distance, 'km' , '' ), 'miles', '')as float) * 1.3 * 0.62137 AS VARCHAR) + ' miles'
FROM customer
这里字符串被替换并乘以你的值,然后它被转换回字符串并与'miles'连接。
答案 1 :(得分:1)
我不清楚你想要执行什么计算,或者用里程替换列值是什么意思。但我会告诉你一个开始:
--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
(它可以很容易地成为float
}),我也可以访问原始单位(如果我想根据这些单位做某事)。
这是我目前能做的最好的事情 - 你的问题很难确定究竟会发生什么样的转变(你提到增加了30%和乘以0.62137)。所以我选择了:
给我一个想法
答案 2 :(得分:1)
改进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