0

我们的表中有一个字段 as LastName,FirstName(FromSomewhere),我需要将字符串分隔成 lastNAme firstname并忽略(FromSomewhere)select 语句。非常感谢任何帮助。

我试过了

Select substring(
         LEFT(_Owner, charindex('(', _Owner) - 1), 
             charindex(',', _Owner) + 1, len(LEFT(_Owner, cha‌​rindex('(', _Owner) - 1))) 
from CC; 

是我尝试过的,我得到一个错误

消息 536,级别 16,状态 5,第 1 行 传递给 SUBSTRING 函数的长度参数无效。

4

3 回答 3

2

假设您使用的是 sql-server 2005 或更高版本:

小提琴演示

;with cte as (
   select _Owner, charindex(',',_Owner) first, charindex('(',_Owner) second 
   from CC
)
select left(_Owner,first-1) lastName,
       substring(_Owner, first+1, second - (first+1)) firstName
from cte
于 2013-09-20T16:57:32.873 回答
0

阅读子串

长度

是一个正整数或 bigint 表达式,它指定将返回多少个表达式字符。如果长度为负,则生成错误并终止语句。如果 start 和 length 之和大于 expression 中的字符数,则返回从 start 开始的整个 value 表达式。

于 2013-09-20T16:46:49.960 回答
0

只要您只执行一次(将数据拆分为 FirstName、LastName 的单独列),那么您就可以这样做。但是,如果您想在常规查询中使用以下技术,性能将会很糟糕。

declare @myString nvarchar(200) = 'LastName,FirstName(FromSomewhere)'

select  SUBSTRING(@myString, 1, CHARINDEX(',', @myString, 1) - 1),
        SUBSTRING(@myString, CHARINDEX(',', @myString, 1) + 1, CHARINDEX('(', @myString, 1) - CHARINDEX(',', @myString, 1) - 1)
于 2013-09-20T16:47:20.890 回答