Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何选择关键字前后的单词_Sql_R_Sql Server - Fatal编程技术网

Sql 如何选择关键字前后的单词

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

我有一个名为BomArration的表,其中有一个名为“叙述”的列,包含一行文本,每行中都有一个名为“Rev”的关键字。我想选择关键字前后的单词。一个问题是,在不同的行中,我想要选择的单词有不同的长度,关键字可以在任何地方。该列中文本行的两个示例是“针对GX-77568版本A执行此操作”和“针对此操作遵循BW-8452-355版本D”

我正在R studio上编写sql查询以发送到sqlserver。现在,我只能抓取关键字前11个字符和关键字后的所有内容

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