我需要完成一个查询。查询返回一个包含“P100+P200”或“SUMME(P400:P1200)”等值的列。
最终的结果应该是:
A 栏 | B 栏 | C 栏 |
---|---|---|
P100 | + | P200 |
P400 | : | P1200 |
已解决提取 A 列和 B 列。
我在前两个步骤中使用了这段代码:
MAX (SUBSTRING(t3.formel, PATINDEX('%[A-Z][0-9]%', t3.formel), PATINDEX('%[+:-]%', SUBSTRING(t3.formel, PATINDEX('%[A-Z][0-9]%', t3.formel), LEN(t3.formel))) - 1)) "Formelteil 1",
MAX (SUBSTRING(t3.formel, PATINDEX('%[+:.-]%', t3.formel), 1) ) AS Sonderzeichen
但我想我会对第三步的解决方案感到盲目。
正如评论中提到的,这实际上并不是 SQL Server 的工作。
提出此类问题时,提供示例 DDL/DML 会很有帮助:
DECLARE @Table TABLE (formel NVARCHAR(100));
INSERT INTO @Table (formel) VALUES
('P100+P200'), ('G100/G200'), ('a100*z200'), ('P1005-P2005'), ('SUMME(P400:P1200)');
您已经完成了三分之二的路程。由于我们似乎只需要担心一个额外的字符,因此我们可以简单地使用运算符 + 1 的位置来查找最后一个字符串的开头,并使用高于其余字符的任意数字,然后将其替换为空:
SELECT t3.formel,
SUBSTRING(t3.formel, PATINDEX('%[A-Z|a-z][0-9]%', t3.formel),PATINDEX('%[-|*|/|+|:]%', t3.formel)-PATINDEX('%[A-Z|a-z][0-9]%', t3.formel)) AS a,
SUBSTRING(t3.formel, PATINDEX('%[-*/+:]%', t3.formel), 1) AS b,
REPLACE(SUBSTRING(t3.formel, PATINDEX('%[-*/+:]%', t3.formel)+1, LEN(t3.formel)),')','') AS c
FROM @Table t3;
福梅尔 | a | b | c |
---|---|---|---|
P100+P200 | P100 | + | P200 |
G100/G200 | G100 | / | G200 |
a100*z200 | a100 | * | z200 |
P1005-P2005 | P1005 | - | P2005 |
夏季(P400:P1200) | P400 | : | P1200 |