【问题标题】:Extract integers from formula(string) using SQL使用 SQL 从公式(字符串)中提取整数
【发布时间】:2016-12-08 13:47:32
【问题描述】:

我有一列包含公式。我只需要提取公式中存在的整数并将它们放在下一行中。对于这个公式,

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

预期的输出如下,没有 100

   Column A
   23
   22 

我想在 sql 中实现这个。请帮忙。提前致谢。

Edit1:公式中的整数实际上是另一个表的 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               

【问题讨论】:

  • 总是你的字符串格式相同?像上面一样。
  • 为什么不是 100?你能用另一个例子来说明一下吗
  • 这是解析器的工作,而不是数据库。将您的专栏带到 Java、C#、Python 等,并在那里开展工作。
  • @Buddi 没有。我可以有像 5+2 这样的公式。我需要删除这些运算符和括号。
  • 在循环中使用 PATINDEX。将其放在标量 UDF 中。

标签: sql sql-server sql-server-2014


【解决方案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)

【讨论】:

  • 谢谢。会试试这个,如果我遇到任何问题..会回来:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-06
  • 2020-06-09
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
相关资源
最近更新 更多