Sql 如何选择关键字前后的单词
我有一个名为BomArration的表,其中有一个名为“叙述”的列,包含一行文本,每行中都有一个名为“Rev”的关键字。我想选择关键字前后的单词。一个问题是,在不同的行中,我想要选择的单词有不同的长度,关键字可以在任何地方。该列中文本行的两个示例是“针对GX-77568版本A执行此操作”和“针对此操作遵循BW-8452-355版本D” 我正在R studio上编写sql查询以发送到sqlserver。现在,我只能抓取关键字前11个字符和关键字后的所有内容Sql 如何选择关键字前后的单词,sql,r,sql-server,Sql,R,Sql Server,我有一个名为BomArration的表,其中有一个名为“叙述”的列,包含一行文本,每行中都有一个名为“Rev”的关键字。我想选择关键字前后的单词。一个问题是,在不同的行中,我想要选择的单词有不同的长度,关键字可以在任何地方。该列中文本行的两个示例是“针对GX-77568版本A执行此操作”和“针对此操作遵循BW-8452-355版本D” 我正在R studio上编写sql查询以发送到sqlserver。现在,我只能抓取关键字前11个字符和关键字后的所有内容 SELECT LEFT(SUBSTRIN
SELECT LEFT(SUBSTRING(BomNarration.Narration,
(CHARINDEX('REV', BomNarration.Narration) - 12),
LEN(BomNarration.Narration)), 11) AS Drawing,
LEFT(SUBSTRING(BomNarration.Narration,
(CHARINDEX('REV', BomNarration.Narration) + 3),
LEN(BomNarration.Narration)), 3) AS RevNum
FROM BomNarration
我希望只有11个字符之前的关键字和3个字符后的关键字将显示。我只想显示关键字前后的单词(“GX-77568”、“A”和“BW-8452-355”“D”)。但我得到的只是关键字前的11个字符和关键字后的所有字符(“ch GX-77568”“A.”和“BW-8452-355”“D”表示该关键字)
屏幕上的结果表
Op Ln Drawing RevNum
<
1 1 10 ING 33B8222 -
<
2 1 13 RSC16A0019 D. AN NCR MUST BE RAISED AND
<
3 1 20 NG C16A0019 E
<
4 5 2 SW-900-0009 B
<
5 6 6 SW-800-0004 A
<
6 14 24 SW-900-0078 A
<
7 15 12 SW-900-0078 A
<
8 16 4 SW-800-0006 A
<
9 22 6 SW-800-0006 A
<
10 25 4 SW-900-0008 C
<
11 27 3 SW-900-0055 B
<
12 28 4 SW-900-0055 B
<
13 29 3 SW-900-0055 B
<
14 30 3 SW-900-0055 B
<
15 36 1 SW-900-0255 A
<
16 36 4 SW-900-0266 A
<
17 36 8 SW-900-0057 A. IF THIS *
<
18 39 2 SW-900-0041 A
<
19 45 3 SW-900-0020 A
<
20 46 2 SW-900-0020 A
“REV”后面的三个字符是
Left(SUBSTRING(BomNarration.Narration, CHARINDEX('REV', BomNarration.Narration) + 3, LEN(BomNarration.Narration)), 3)
演示
返回
Drawing RevNum
ch GX-77568 A.
BW-8452-355 D
上次编辑后的代码运行正常。您是否可以在不使用引号和逗号的情况下重写sql查询,删除与您的问题不相关的任何表和列,明确指出它是哪一列以及关键字是什么,并添加一些示例数据和预期输出对不起,但它不起作用。结果仍然是一样的。如果在我想要的作品之后有更多的文字,它还能显示更多的文字吗?这个表达式返回的字符数不超过3个。当我使用代码时,它显示为这样。我在上次编辑中展示了它。此外,我希望代码不要在Rev关键字前显示11个字符,而是在关键字前显示单词,这意味着只有GX-77568,前面没有ch。此外,出于某种原因,当我今天在w3school的“自己尝试”页面上尝试您的代码时,它拒绝了该语句,并说您的代码有语法错误,但是当我昨天在同一个地方尝试时,它起了作用。W3school提供了不同的sql产品。请确保在Microsoft Sql Server下运行它。不幸的是,我看不出如何强制选择服务器。我走了这条路,它是有效的。
SELECT LEFT(SUBSTRING(BomNarration.Narration,
(CHARINDEX('REV', BomNarration.Narration) - 12),
LEN(BomNarration.Narration)), 11) AS Drawing,
LEFT(SUBSTRING(BomNarration.Narration,
(CHARINDEX('REV', BomNarration.Narration) + 3),
LEN(BomNarration.Narration)), 3) AS RevNum
FROM (values
('do this that for such such GX-77568 REV A.')
,('Follow BW-8452-355 REV D for this this that that'))
BomNarration(Narration)
Drawing RevNum
ch GX-77568 A.
BW-8452-355 D