首页 > 解决方案 > SQL:从字符串中提取一个单词

问题描述

我有以下 SQL 语句,它在关键字“调度级别:”之后查找某个单词。

SELECT SUBSTRING(CadRemarks, CHARINDEX('dispatch level:', CadRemarks) + LEN('dispatch level:'), 6) as 
data
from myTable

我想以某种方式升级此语句,以返回关键字“调度级别:”和我要查找的单词之后的任何内容之间的任何内容。所以它可以是另一个词、字符或空格。例如:

Dispatch level: XXXXX YYY
or
Dispatch level: XXXXX

Only return XXXXX

编辑

我正在尝试这个 SQL,但它也选择了我需要的单词之后的单词。

select left(tt.CadRemarks, charindex(' ', tt.CadRemarks+ ' ')) as data
from myTablet cross apply 
 ( values (substring(CadRemarks, charindex('dispatch level:', CadRemarks) + 
16, len(CadRemarks))) 
 ) tt(CadRemarks)
where t.CadRemarks like '%dispatch level:%'

where 子句是让我限制记录,但我将不得不移动它并将整个事情作为 CASE 语句。但那是以后的事了......

也试过这个,但得到一个错误(无效的长度参数传递给左边......)

SELECT SUBSTRING(CadRemarks, CHARINDEX('dispatch level: ', CadRemarks) + 
LEN('dispatch level: ') + 1, 
CHARINDEX('', CadRemarks) - (CHARINDEX('dispatch level: ', CadRemarks) + 2 + 
LEN('dispatch level: ')))
FROM myTable

标签: sqlsql-server

解决方案


用于left()进一步查找字符串:

select left(tt.CadRemarks, charindex(' ', tt.CadRemarks+ ' ')) as data
from table t cross apply 
     ( values (substring(CadtRemarks, charindex('dispatch level:', CadRemarks) + 16, len(CadRemarks))) 
     ) tt(CadRemarks);

推荐阅读