Substring и charindex не возвращают то, что я ожидаю - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь извлечь только имя из столбца комментариев. Тем не менее, использование комбинации подстроки и charindex не возвращает то, что я хочу.

Вот как выглядят необработанные данные:

MAR-05-2018 01:08:16 PM - Joe Willis (Additional comments) text blah blah 
MAR-25-2018 01:25:19 PM - mitch.ward (Additional comments) text blah blah 
MAR-26-2018 01:33:21 PM - Hank William (Additional comments) text blah blah 

Вот мой запрос:

SELECT
SUBSTRING(Comment,26,CHARINDEX('(',Comment)) 
FROM ext.x_amr_sp

Вот мои результаты:

Joe Willis (Condition Action Comments
mitch.ward (Condition Action Comments  
Hank William (Condition Action Comments

Я хочу:

Joe Willis
mitch.ward
Hank William

Ответы [ 2 ]

3 голосов
/ 02 июля 2019

Используйте LEFT() как

SELECT *, LEFT(Str, CHARINDEX('(', Str) - 2) --Here -2 t avoid the leading space
FROM (VALUES
('Joe Willis (Condition Action Comments'),
('mitch.ward (Condition Action Comments'),  
('Hank William (Condition Action Comments')
) T(Str)

Так как вы обновляете вопрос и предоставляете другие данные

SELECT *, SUBSTRING(Str, 27, CHARINDEX('(', Str) - 28)
FROM (VALUES
('MAR-05-2018 01:08:16 PM - Joe Willis (Additional comments) text blah blah'),
('MAR-25-2018 01:25:19 PM - mitch.ward (Additional comments) text blah blah'), 
('MAR-26-2018 01:33:21 PM - Hank William (Additional comments) text blah blah')
) T(Str)

Здесь вы увидите db <> fiddle , чтобы увидетькак это работает.

1 голос
/ 02 июля 2019
DECLARE @Table TABLE (Comment VARCHAR(1000))
INSERT @Table VALUES
('MAR-05-2018 01:08:16 PM - Joe Willis (Additional comments) text blah blah'),
('MAR-25-2018 01:25:19 PM - mitch.ward (Additional comments) text blah blah'),
('MAR-26-2018 01:33:21 PM - Hank William (Additional comments) text blah blah')

;WITH CTE (Comment) AS
(
    SELECT RIGHT(Comment, LEN(Comment)-26)
    FROM @Table
)
SELECT SUBSTRING(Comment,0, CHARINDEX('(',Comment)) FROM CTE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...