У меня есть таблица BomNarration со столбцом Narration, содержащим строку текстов, и в каждой строке есть одно ключевое слово Rev. Я хочу выбрать слова до и после ключевого слова. Одна проблема состоит в том, что в разных строках слова, которые я хочу выбрать, имеют разную длину, а ключевое слово может быть где угодно. Два примера строки текста в столбце: «сделай это для такого GX-77568 REV A.» и «Следуйте BW-8452-355 REV D для этого, этого, того».
Я пишу запрос sql на R studio для отправки на сервер 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
Просто чтобы прояснить, я бы отобразил весь код
SELECT BomOperation.Op,
CASE WHEN BomOperations.AutoNarrCode = 0
THEN BomOperationsStd.Ln
ELSE BomOperations.Ln
END,
CASE WHEN BomOperations.AutoNarrCode = 0
THEN LEFT(SUBSTRING(BomNarrationStd.Narration, (CHARINDEX('REV', BomNarrationStd.Narration) - 12), LEN(BomNarrationStd.Narration)), 11)
ELSE LEFT(SUBSTRING(BomNarration.Narration, (CHARINDEX('REV', BomNarration.Narration) - 12), LEN(BomNarration.Narration)), 11)
END
CASE WHEN BomOperations.AutoNarrCode = 0
THEN LEFT(SUBSTRING(BomNarration.NarrationStd, CHARINDEX('REV', BomNarrationStd.Narration) + 3, LEN(BomNarrationStd.Narration)), 3)
ELSE LEFT(SUBSTRING(BomNarration.Narration, CHARINDEX('REV', BomNarration.Narration) + 3, LEN(BomNarration.Narration)), 3)
END
FROM ......