如何使用 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, ''))
以下是我的查询。它给了我正确的输出,但我需要 运行 它有效地用于 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, ''))