Member 13138564 Ответов: 3

Хотите отделить имя от charindex


Не могли бы вы помочь

записи в названии похожи на
ЭНТОВИН ПИРСОН
СУАН ТХИ ХА
ДАРРИН ХААЛА
БЕНДЖАМИН ХААС
КАЛИМ ХАБЕТ

Что я уже пробовал:

------------------------------------------------------
выберите left (name, CHARINDEX (' ', name)-1) в качестве first_name из Business
-----------------------------------------------------------------
но получаю ошибку:
Msg 537, Уровень 16, Состояние 2, Строка 18
Недопустимый параметр длины, передаваемый функции LEFT или SUBSTRING.

3 Ответов

Рейтинг:
6

RedDk

Вы получаете конкретное сообщение, которое получаете, когда не указываете размер переменной NVARCHAR, так что по умолчанию она равна 1. И длина, в конце концов, ваша математика, следовательно, равна нулю.

Вот что показывает мой дрейф.

DECLARE @exampleY as nvarchar(20)
SET @exampleY = 'Nater Termi'	

SELECT LEFT(@exampleY,CHARINDEX(' ',@exampleY)-1) AS [pisanCP01]-- 'Nater'
SELECT RIGHT(@exampleY,CHARINDEX(' ',@exampleY)-1) AS [pisanCP0A]-- 'Termi'

Если бы ты это сделал:
DECLARE @exampleZ as nvarchar
SET @exampleZ = 'Scobie Agent'

Затем попытайтесь получить длину строки, которую вы вводите, и вы получите вот это:
SELECT LEN(@exampleZ)
/*
     1
*/

Вместо "12"


Рейтинг:
1

PeejayAdams

SQL 2016 представил функцию STRING_SPLIT, которая должна выполнять эту работу:

STRING_SPLIT (Transact-SQL) | Microsoft Docs[^]


Рейтинг:
1

OriginalGriff

Если вам нужно рассматривать имя как отдельные части, то введите их как отдельные части и сохраните их отдельно - вы не можете предположить, что у пользователя будет только два имени( или даже больше одного!), или что тот, который находится слева от пробела, является "первым именем" - это может быть фамилия.

В этом случае это почти наверняка является причиной вашей ошибки: если у кого-то в вашей базе данных есть только одно имя, то это именно та ошибка, которую вы получите, потому что если совпадения нет, CHARINDEX вернет ноль ...