提取字符串的两个部分

时间:2015-03-19 16:00:06

标签: sql

我的结果中的一个字段包含以下"标准"注意到:

Audit Status changed from STOP to RELEASED.
Audit Status changed from STOP to RFS Pend.
Audit Status changed from RELEASED to RFS Pend.
Audit Status changed from STOP to ODY Pend.
Audit Status changed from ODY Pend to RELEASED.

可能还有其他说明,但这些是我到目前为止看到的。

我想做的是用表达式提取每个音符的2个部分。

第一部分是fromtoSTOP, RELEASED, ODY Pend, etc.)之间的字词。

第二部分是toRELEASED, RFS Pend, ODY, etc.

之后的字词

我已尝试拆分它可以工作,但它使查询运行的时间更长(至少我试图为相对较新的sql的人做的方式)。我已经看过使用MID但是我不确定如何编写表达式,因为每个部分的起点都不同。

1 个答案:

答案 0 :(得分:0)

这应该与MS SQL Server一起使用。

CREATE TABLE MyTable (col1 int IDENTITY(1,1), col2 varchar(50));

INSERT MyTable (col2) VALUES ('Audit Status changed from STOP to RELEASED.');
INSERT MyTable (col2) VALUES ('Audit Status changed from STOP to RFS Pend.');
INSERT MyTable (col2) VALUES ('Audit Status changed from RELEASED to RFS Pend.');
INSERT MyTable (col2) VALUES ('Audit Status changed from STOP to ODY Pend.');
INSERT MyTable (col2) VALUES ('Audit Status changed from ODY Pend to RELEASED.');

和...

WITH MyData AS
(
  SELECT col1, 
    col2, 
    PATINDEX('% from %', col2) + 6 as Start1, 
    PATINDEX('% to %', col2) as Stop1,
    PATINDEX('%.', col2) as Stop2
  FROM MyTable
)
SELECT SUBSTRING(col2, Start1, Stop1-Start1) as Word1,
       SUBSTRING(col2, Stop1+4, Stop2-Stop1-4) as Word2
FROM MyData

我不能说效果会比你现在所做的更好,但是你可以尝试一下让我们知道。

注意:如果您的字符串中出现多次模式('来自','或'或'。'),则会出现故障。并且你想要包含一些错误处理或者一个where子句来过滤掉零值(当找不到模式时),这将导致负长度。