在sql中分隔一个字符串

时间:2013-09-20 16:40:26

标签: sql sql-server tsql

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

我试过

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

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

  

Msg 536,Level 16,State 5,Line 1传递给SUBSTRING函数的长度参数无效。

3 个答案:

答案 0 :(得分:2)

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

<强> Fiddle demo

;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

答案 1 :(得分:0)

阅读on Substring

  

长度

     

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

答案 2 :(得分: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)