如何使用 SQL 高效地 select 字符串中的特定文本

How to select specific text from the string in efficient way using SQL

以下是我的查询。它给了我正确的输出,但我需要 运行 它有效地用于 500k 记录。

 DECLARE @DESC_MESSAGE VARCHAR(5000)
 SET @DESC_MESSAGE = '12345 VENKAT was entered ODC ABCD-3'
 SELECT REPLACE(@DESC_MESSAGE,SUBSTRING(@DESC_MESSAGE,1,CHARINDEX('was',@DESC_MESSAGE,3)-1),'')

我只想检索 'was' 之后的文本,它可以根据条件更改。 例如。文本可以像 '112233 XYZ 已输入 ODC PQRS-3' 或 '223344 HARRY 已退出 ODC AMD-3'

请提出检索此类文本的有效方法。

我倾向于使用 stuff():

select stuff(col, 1, chardindex('was ', col + 'was ') + 4, '')

如果'was '不在文本中,charindex()函数中的+ 'was +只是保证不会出错。

50 万行并没有那么大..

我在你的问题中看到的是架构问题,

为什么要拆分列进行查询?

为什么不在原始位置拆分列?

最终你可以有另一列只包含 "was"

之后的文本

即使行增长很多,这也可能会更好。

select LTRIM(stuff(@DESC_MESSAGE, 1, CHARINDEX(' was', @DESC_MESSAGE + 'was') + 3, ''))