SQL 服务器查询删除百分比
SQL Server Query Removing Percentages
我想知道是否有一种方法可以使用 SQL 中的替换函数专门查找百分比?
例如我有数据:
- Ollie 有 1% 的时间在工作
- Ollie 2 有 2% 的时间在工作
- Ben 有 2.1% 的时间在工作
我不想只替换结果中的其他数字百分比。
目前我使用的方法是:
UPDATE DataTable SET PersonInfo = replace(PersonInfo, '%', '' );
但我不知道如何select 与百分比相关的数据(数字)...
期望的输出:
- 奥利当时在上班
- Ollie 2 正在上班
- 当时Ben在上班
一些基本的字符串操作:
SELECT *,
REVERSE(
STUFF(REVERSE(PersonInfo),
CHARINDEX('%',REVERSE(PersonInfo) ),
CHARINDEX(' ', REVERSE(PersonInfo),CHARINDEX('%',REVERSE(PersonInfo))) -
CHARINDEX('%',REVERSE(PersonInfo) )+1,
'')
)
FROM DataTable
WHERE PersonInfo LIKE '%!%%' ESCAPE '!';
我的回答和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);
我想知道是否有一种方法可以使用 SQL 中的替换函数专门查找百分比?
例如我有数据:
- Ollie 有 1% 的时间在工作
- Ollie 2 有 2% 的时间在工作
- Ben 有 2.1% 的时间在工作
我不想只替换结果中的其他数字百分比。
目前我使用的方法是:
UPDATE DataTable SET PersonInfo = replace(PersonInfo, '%', '' );
但我不知道如何select 与百分比相关的数据(数字)...
期望的输出:
- 奥利当时在上班
- Ollie 2 正在上班
- 当时Ben在上班
一些基本的字符串操作:
SELECT *,
REVERSE(
STUFF(REVERSE(PersonInfo),
CHARINDEX('%',REVERSE(PersonInfo) ),
CHARINDEX(' ', REVERSE(PersonInfo),CHARINDEX('%',REVERSE(PersonInfo))) -
CHARINDEX('%',REVERSE(PersonInfo) )+1,
'')
)
FROM DataTable
WHERE PersonInfo LIKE '%!%%' ESCAPE '!';
我的回答和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);