2016-12-08 31 views
0

我有一列含公式的列。我只需要提取公式中存在的整数,并将它们放在下一行中。对于该式中,使用SQL从公式(字符串)中提取整数

Column A 
(((23-22)/23)*100) 

预期的输出是如下而不100

Column A 
    23 
    22 

我要在SQL中实现这一点。请帮忙。提前致谢。

编辑1:公式中的整数实际上是来自另一个表的ID。我需要加入上的ID在当前的表这个公式

Table 1   Table 2 
Tbl1ID   Tabl2Id Formula 
22    1   (((23-22)/23)*100) 
23    2   24 + 25 
24    
25 

我已经看到它,表1没有Tbl1ID为100

EDIT2在:也许我的做法是不正确的。实际的要求是我需要用与id关联的名称替换整数。

Table 1   Table 2       Table 3(Required) 
Tbl1ID Name  Tbl2Id Formula    Col1 
    23  a   1  (((23-22)/23)*100)  (((a-b)/a)*100) 
    22  b    
+0

一直是你的字符串是相同的格式?像上面一样。 – Buddi

+0

为什么不是100?你可以请示例与另一个例子 –

+3

这是一个解析器,而不是数据库的工作。把你的专栏带到Java,C#,Python等,并在那里完成工作。 –

回答

1

试试这个:

DECLARE @TEST TABLE (TBL1ID INT) 
INSERT INTO @TEST VALUES ('22') 
INSERT INTO @TEST VALUES ('23') 
INSERT INTO @TEST VALUES ('24') 
INSERT INTO @TEST VALUES ('25') 

DECLARE @NUM TABLE (INTE INT) 
DECLARE @FORM VARCHAR(100)='(((23-22)/23)*100)',@VAL VARCHAR(MAX) 

WHILE(PATINDEX('%[0-9]%',@FORM))>0 
BEGIN 
    SET @VAL=(SELECT LEFT(VAL,PATINDEX('%[^0-9]%', VAL+'A')-1) FROM(
     SELECT SUBSTRING(@FORM, PATINDEX('%[0-9]%', @FORM), LEN(@FORM)) VAL)X) 
    INSERT INTO @NUM VALUES(@VAL) 
    SET @FORM= SUBSTRING(@FORM, PATINDEX('%[0-9]%', @FORM)+LEN(@VAL),LEN(@FORM)) 
END 

SELECT DISTINCT * FROM @NUM WHERE INTE IN (SELECT * FROM @TEST) 
+0

谢谢。将试试这个,如果我面临任何问题......将回来:) – nam