我想知道是否有一种方法可以使用SQL中的替换函数来专门查找百分比?
比如说我有数据:
我不想仅在结果中替换其他数字。
目前我有没有办法做到这一点:
UPDATE DataTable SET PersonInfo = replace(PersonInfo, '%', '' );
但我不知道如何选择与百分比相关的数据(数字)......
期望的输出:
答案 0 :(得分:5)
一些基本的字符串操作:
SELECT *,
REVERSE(
STUFF(REVERSE(PersonInfo),
CHARINDEX('%',REVERSE(PersonInfo) ),
CHARINDEX(' ', REVERSE(PersonInfo),CHARINDEX('%',REVERSE(PersonInfo))) -
CHARINDEX('%',REVERSE(PersonInfo) )+1,
'')
)
FROM DataTable
WHERE PersonInfo LIKE '%!%%' ESCAPE '!';
<强> Dbfiddle Demo 强>
答案 1 :(得分:1)
我的回答与lad2025非常相似:
WITH VTE AS(
SELECT *
FROM (VALUES('Ollie is at work 1% of the time'),
('Ollie 2 is at work 2% of the time'),
('Ben is at work 2.1% of the time')) V(S))
SELECT *,
STUFF(VTE.S, CI.P - RCI.S + 2 , RCI.S,'')
FROM VTE
CROSS APPLY(VALUES(CHARINDEX('%',VTE.S))) CI(P)
CROSS APPLY(VALUES(CHARINDEX(' ',REVERSE(LEFT(VTE.S,CI.P))))) RCI(S);
我刚使用了CROSS APPLY
。
如果您想将此作为UPDATE
语句执行,则为:
UPDATE DT
SET PersonInfo = STUFF(DT.PersonInfo, CI.P - RCI.S + 2 , RCI.S,'')
FROM DataTable DT
CROSS APPLY(VALUES(CHARINDEX('%',DT.PersonInfo))) CI(P)
CROSS APPLY(VALUES(CHARINDEX(' ',REVERSE(LEFT(DT.PersonInfo,CI.P))))) RCI(S);