SQL Server查询删除百分比

时间:2018-02-14 15:46:27

标签: sql-server tsql replace percentage

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

比如说我有数据:

  • Ollie在1%的时间里工作
  • Ollie 2在2%的时间里工作
  • Ben在2.1%的时间里工作

我不想仅在结果中替换其他数字。

目前我有没有办法做到这一点:

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

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

期望的输出:

  • Ollie正处于工作时间
  • Ollie 2正处于工作时间
  • Ben正处于工作时间

2 个答案:

答案 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);