子串的子串

时间:2013-04-08 10:43:31

标签: sql tsql sql-server-2008-r2

我在SQL Server 2008中有一个文本字段(“Employs”表中名为“BiographyText”的字段),用于存储KPI目标数据:

rebfirst60,
reifirst1.3,
retfirst50

第一个目标是60,对于RebFirst,第二个目标是ReiFirst为1.3,第三个为RetFirst为50。

我希望能够返回3个不同的数值,因为这些数值将被视为某个员工每个kpi的目标。

我有一个完整的思维模块试图找出最好的方法,任何建议/帮助?

总的来说,我试图找到kpiname(“rebfirst”),然后检索接下来的2个字符/数字

我尝试了以下内容,但它在第一个子字符串的函数2上出错,因为它是非数字的:

select SUBSTRING(biographytext,SUBSTRING('rebfirst',1,2),2) from employs

由于

3 个答案:

答案 0 :(得分:2)

试试这个

SELECT 
    CASE WHEN PatIndex('%[a-z]%',REVERSE(BiographyText)) > 0
      THEN RIGHT(BiographyText,PatIndex('%[a-z]%',REVERSE(BiographyText))-1)
      ELSE '' END AS target 
FROM employs

以及 check another solution using function

答案 1 :(得分:0)

从帖子 第一个目标是60,对于RebFirst,第二个目标是ReiFirst为1.3,第三个为RetFirst为50。

来自评论 我不需要实际的kpiname只是值

以下Query将为您提供答案。

select case column_name when 'rebfirst60' then 60
       when 'reifirst1.3' then 1.3
       when 'retfirst50' then 50
from employs

答案 2 :(得分:0)

我现在使用以下内容:

select 
SUBSTRING(SUBSTRING(biographytext,1,10),9,2) as RebookingFirst,
SUBSTRING(SUBSTRING(biographytext,11,20),12,3) as ReInventFirst,
SUBSTRING(SUBSTRING(biographytext,21,30),16,3) as ReCreateFirst,
SUBSTRING(SUBSTRING(biographytext,31,40),20,2) as RetentionFirst,
SUBSTRING(SUBSTRING(biographytext,41,50),23,2) as ReferralsFirst
from employs

这给出了每个kpi的结果