2013-09-20 3 views
0

У нас есть поле в нашей таблице как LastName,FirstName(FromSomewhere) и мне нужно отделить строку в lastNAme firstname и игнорировать (FromSomewhere) с оператором выбора. Любая помощь действительно ценится.Разделение строки в SQL

Я попытался с

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

является то, что я пытался и я получаю сообщение об ошибке, как

Msg 536, уровень 16, состояние 5, строка 1 Неверный параметр длины передается функции SUBSTRING ,

+0

Что ваш пробовал ?. Где вы застряли? Какую ошибку вы получаете? –

+1

Какой вкус sql? – ngneema

+0

sql и sql server - это не то же самое – vol7ron

ответ

0

Read on Substring

длина

является положительным целым числом или BIGINT выражение, которое определяет, как будет возвращено множество символов выражения. Если длина отрицательная, генерируется ошибка, и оператор завершается. Если сумма начала и длина больше, чем количество символов в выражении , возвращается целое значение, начинающееся с начала.

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) 
+0

По-прежнему получают ту же ошибку с кодом выше, что и Msg 536, уровень 16, состояние 5, строка 1 Неверный параметр длины, переданный в Функция SUBSTRING. Он возвращает две строки один как null null и первую запись и ничего больше – user2799983

2

Предполагая, что вы находитесь на SQL-сервере 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 
Смежные вопросы