如何在SQL Server中移除括号内所有文本并返回左侧有效内容
问题解决:提取employee_name中的姓名并修复LEFT函数报错
报错原因
你原来的SQL报错是因为当employee_name字段里没有(符号时,CHARINDEX('(', A.[employee_name])会返回0,计算0-1=-1后传给LEFT函数,而LEFT不接受负数长度参数,直接触发报错。
解决方案
要同时处理有括号和无括号的情况,并且确保结果没有尾随空格,用下面两种方法都可以:
方法1:用NULLIF简化逻辑
RTRIM(LEFT(A.[employee_name], NULLIF(CHARINDEX('(', A.[employee_name]) - 1, -1)))
NULLIF会把CHARINDEX返回0时产生的-1转换成NULL,而LEFT遇到第二个参数为NULL时会返回整个字段内容,避免报错RTRIM用来去掉提取结果的尾随空格,比如示例中John Smith后面的空格
方法2:用CASE语句更直观
RTRIM( CASE WHEN CHARINDEX('(', A.[employee_name]) > 0 THEN LEFT(A.[employee_name], CHARINDEX('(', A.[employee_name]) - 1) ELSE A.[employee_name] END )
- 先判断字段里是否存在
(,存在就截取括号前的内容,不存在就直接用整个字段 - 最后统一用
RTRIM清理尾随空格
如果需要同时去掉姓名开头的空格,可以把RTRIM换成LTRIM(RTRIM(...))。
内容的提问来源于stack exchange,提问作者Carle Veall
相关产品推荐
相关产品推荐

