Sql 子字符串和charindex没有返回我期望的结果

Sql 子字符串和charindex没有返回我期望的结果,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正试图从注释列中提取名称。然而,使用substring和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 Will

我正试图从注释列中提取名称。然而,使用substring和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
使用
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)

下面是一个示例,看看它是如何工作的。

那么出了什么问题?应用表达式之前,数据是什么样子的?你想要的结果是什么?总的来说,
子字符串的参数是expression、start和length,而不是expression、start和end(我猜你认为是这样吧?)。编辑了我的原始帖子以澄清你仍然需要在尝试之前发布你的数据。我们不能帮你从A到B,因为我们只知道B和C在哪里。请在26的地方放0。我需要跳过前26个characters@PJ.SQL,在这种情况下,请提供一些示例数据。@Larnu它必须是一些绝密数据。
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)