SQL 服务器查询删除百分比

SQL Server Query Removing Percentages

我想知道是否有一种方法可以使用 SQL 中的替换函数专门查找百分比?

例如我有数据:

我不想只替换结果中的其他数字百分比。

目前我使用的方法是:

UPDATE DataTable SET PersonInfo = replace(PersonInfo, '%', '' );

但我不知道如何select 与百分比相关的数据(数字)...

期望的输出:

一些基本的字符串操作:

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

我的回答和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);