用 SUBSTRING 和 PATINDEX 分隔字符串 - 最后一步

问题描述 投票:0回答:1

我需要完成一个查询。查询返回一个包含“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 substring patindex
1个回答
0
投票

正如评论中提到的,这实际上并不是 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
© www.soinside.com 2019 - 2024. All rights reserved.