如何删除sql server中括号内的所有文本并仅返回其左侧的文本

问题描述 投票:0回答:1

例如,我有一串文本,如下所示

约翰·史密斯(老板:汤姆·柯林斯)(onleave)

但我只想返回 John Smith,John Smith 之后没有空格。 John Smith 存储在employee_name 字段中 有没有办法在 sql server 中做到这一点? 括号可以有多个实例

我尝试使用下面的 左(A.[员工姓名], CHARINDEX('(', A.[员工姓名]) - 1) 但它在 SSMS 中返回以下错误

传递给 LEFT 或 SUBSTRING 函数的长度参数无效。 该声明已终止。

sql sql-server replace charindex
1个回答
0
投票

您的问题是,当

(
字段中没有
employee_name
时,
CHARINDEX
返回
0
,因此传递给
LEFT
的索引无效(
-1
)。您需要先检查
(
是否存在。例如:

select CASE WHEN CHARINDEX('(', A.[employee_name]) > 0
            THEN TRIM(LEFT(A.[employee_name], CHARINDEX('(', A.[employee_name]) - 1))
            ELSE TRIM(A.[employee_name])
       END
from A

dbfiddle.uk

上进行演示
© www.soinside.com 2019 - 2024. All rights reserved.