powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вырезать второе слово из строки
24 сообщений из 24, страница 1 из 1
Вырезать второе слово из строки
    #39630591
U_rtqwec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите пожалуйста, есть строка, например Иван Иванов, как проще всего вырезать и вывести второе слово?
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630600
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вбить название топика в поиск по форуму
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630609
Massa52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
U_rtqwec,
Как вариант -
Код: sql
1.
2.
DECLARE @str NVARCHAR(100) = N'Иван Иванов'; 
SELECT RIGHT(@str, CHARINDEX(N' ', @str) + 1);
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630624
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Massa52U_rtqwec,
Как вариант -
Код: sql
1.
2.
DECLARE @str NVARCHAR(100) = N'Иван Иванов'; 
SELECT RIGHT(@str, CHARINDEX(N' ', @str) + 1);



Но так в лоб не стоит использовать
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630626
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Massa52,

Ага, при Иван Васильевич мы получим "льевич"
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630651
AlanDenton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вариант не фонтан, но пусть будет:
Код: sql
1.
2.
DECLARE @a NVARCHAR(100) = N'Иван Васильевич'
SELECT PARSENAME(REPLACE(@a, ' ', '.'), 1), PARSENAME(REPLACE(@a, ' ', '.'), 2)
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630661
Дед-Папыхтет
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Massa52U_rtqwec,
Как вариант -
Код: sql
1.
2.
DECLARE @str NVARCHAR(100) = N'Иван Иванов'; 
SELECT RIGHT(@str, CHARINDEX(N' ', @str) + 1);


А если фамилия не Иванов? Сразу бы советовали
select right(@str,6)
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630674
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дед-ПапыхтетMassa52U_rtqwec,
Как вариант -
Код: sql
1.
2.
DECLARE @str NVARCHAR(100) = N'Иван Иванов'; 
SELECT RIGHT(@str, CHARINDEX(N' ', @str) + 1);


А если фамилия не Иванов? Сразу бы советовали
select right(@str,6)


даладно, и так хорошо, CHARINDEX дает позицию слева, если дает, а режем справа, считая, что позиция слева и есть количество


DECLARE @str NVARCHAR(100) = N'Иванидзе Петров Водкин';
SELECT CHARINDEX(N' ', @str)
SELECT RIGHT(@str, CHARINDEX(N' ', @str) + 1);

---
ров Водкин
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630691
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинДед-Папыхтетпропущено...

А если фамилия не Иванов? Сразу бы советовали
select right(@str,6)


даладно, и так хорошо, CHARINDEX дает позицию слева, если дает, а режем справа, считая, что позиция слева и есть количество


DECLARE @str NVARCHAR(100) = N'Иванидзе Петров Водкин';
SELECT CHARINDEX(N' ', @str)
SELECT RIGHT(@str, CHARINDEX(N' ', @str) + 1);

---
ров Водкин

Ну если у автора темы все слова разделяются ОДНИМ пробелом - таки легко и ненапряжно написать вполне кошерный код. Можно его обернуть в case when then else end, но мне лень.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
DECLARE @str NVARCHAR(100) = N'Иванидзе Петров Водкин'; 
SELECT CHARINDEX(N' ', @str) -- первый пробел
SELECT substring(@str,CHARINDEX(N' ', @str)+1,len(@str)-CHARINDEX(N' ', @str)) -- все за первым пробелом
SELECT CHARINDEX(N' ', substring(@str,CHARINDEX(N' ', @str)+1,len(@str)-CHARINDEX(N' ', @str))) -- второй пробел
-- все между первым пробелом и вторым
select left(substring(@str,CHARINDEX(N' ', @str)+1,len(@str)-CHARINDEX(N' ', @str)),
len(substring(@str,CHARINDEX(N' ', @str)+1,len(@str)-CHARINDEX(N' ', @str)))
-CHARINDEX(N' ', substring(@str,CHARINDEX(N' ', @str)+1,len(@str)-CHARINDEX(N' ', @str)))
)
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630738
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
DECLARE @str NVARCHAR(100) = N'Иванидзе Петров Водкин';
DECLARE @Delimiters NVARCHAR(100) = N'. ,;:';

SELECT LEFT(S,PATINDEX(N'%[^'+@Delimiters+N']['+@Delimiters+N']%',S+LEFT(@Delimiters,1)))
FROM (SELECT STUFF(@str,1,1+NULLIF(PATINDEX(N'%['+@Delimiters+N'][^'+@Delimiters+N']%',STUFF(@str,1,NULLIF(PATINDEX(N'%['+@Delimiters+N'][^'+@Delimiters+N']%',LEFT(@Delimiters,1)+@str),0),N'')),0),N'')) T(S);
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630788
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о! все меряются... тогда я тож :)
Код: sql
1.
2.
3.
4.
5.
6.
7.
declare @str nvarchar(100) = N'Иванидзе    Петров   Водкин'
declare @t table (id int identity, name nvarchar(100))

insert @t (name)
select * from string_split(@str, ' ') where len(value) != 0

select * from @t where id = 2
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630802
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дедушкао! все меряются... тогда я тож :)
Код: sql
1.
2.
3.
4.
5.
6.
7.
declare @str nvarchar(100) = N'Иванидзе    Петров   Водкин'
declare @t table (id int identity, name nvarchar(100))

insert @t (name)
select * from string_split(@str, ' ') where len(value) != 0

select * from @t where id = 2



Хмм, если 2016:
авторstring_split - SQL Server (starting with 2016)
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630804
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
U_rtqwecПомогите пожалуйста, есть строка, например Иван Иванов, как проще всего вырезать и вывести второе слово?

Дать по пальцам умнику, который такую структуру таблицы сотворил, забыв о НФ
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630806
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинХмм, если 2016:откуда-то известно, что это не так?
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630808
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дедушкаоткуда-то известно, что это не так?
в моей 12ке не работает, к примеру
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630809
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
шК0ДЕРв моей 12ке не работает, к примеруесли вы не в курсе, что сия ф-ия только с 2016 это проблемы ваших знаний, а если ТС не указал версию сервера то это его проблемы (по дефолту считается самая распоследняя). :)
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630813
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДедушкашК0ДЕРв моей 12ке не работает, к примеруесли вы не в курсе, что сия ф-ия только с 2016 это проблемы ваших знаний, а если ТС не указал версию сервера то это его проблемы (по дефолту считается самая распоследняя). :)

string_split - SQL Server (starting with 2016) вестимо...
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630886
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дедушка,

а если разных разделителей много?

("А если б он вёз патроны?!" ©)
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630890
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap,

добавить разделителей по желанию :D
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
declare @str nvarchar(100) = N';LOL Иванидзе    Петров   Водкин'
select rtrim(try_convert(xml, '<r>' + replace(replace(@str, char(32), '</r><r>'), char(59), '</r><r>') + '</r>')
.query('for $x in (/r[position()>1 and data(.)>""]) return concat($x, " ")').value('.', 'varchar(255)'))

go
declare @str nvarchar(100) = N'LOL Иванидзе    Петров   Водкин'
select rtrim(try_convert(xml, '<r>' + replace(replace(@str, char(32), '</r><r>'), char(59), '</r><r>') + '</r>')
.query('for $x in (/r[position()>1 and data(.)>""]) return concat($x, " ")').value('.', 'varchar(255)'))



кстати хз что будет быстрее PATINDEX или xml
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630892
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ffiap,

добавить разделителей по желанию :D
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
declare @str nvarchar(100) = N';LOL Иванидзе Петров Водкин'
select rtrim(try_convert(xml, '<r>' + replace(replace(@str, char(32), '</r><r>'), char(59), '</r><r>') + '</r>')
.query('for $x in (/r[position()>1 and data(.)>""]) return concat($x, " ")').value('.', 'varchar(255)'))

go
declare @str nvarchar(100) = N'LOL Иванидзе Петров Водкин'
select rtrim(try_convert(xml, '<r>' + replace(replace(@str, char(32), '</r><r>'), char(59), '</r><r>') + '</r>')
.query('for $x in (/r[position()>1 and data(.)>""]) return concat($x, " ")').value('.', 'varchar(255)'))




кстати хз что будет быстрее PATINDEX или xmlТочнее, на сколько наносекунд?
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630893
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap,

ну смотря в каких объемах сравнивать, думаю на (десяти-ста)-милионной таблице возможно разница будет.
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630898
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДедушкаРолг ХупинХмм, если 2016:откуда-то известно, что это не так?

нескрепово
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630902
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapа если разных разделителей много?а если пробел является и разделителем и частью "слова"?
смысл придумывать себе приключений на жо? есть постановка задачи...
хумор— Слушай, ты разработчик. Ответь, почему разработчики всегда неправильно оценивают время на создание программ?
— Представь что тебе надо разгрузить машину, сколько времени это займет?
— Пару часов.
— Это камаз.
— 8 часов.
— Камаз, груженый песком.
— 12 часов.
— У тебя нет лопаты и инструментов, только твои руки.
— 2 дня.
— На улице минус 40.
— 4 дня.
— Камаз вообще под водой.
— Так же нечестно, ты постоянно придумываешь новые условия! К чему ты мне вообще все это рассказываешь? Вы, разработчики, вечно всякую фигню рассказываете! Вместо этого могли бы просто оценить правильное время на разработку.
...
Рейтинг: 0 / 0
Вырезать второе слово из строки
    #39630910
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
правильно, сразу надо брать ТЗ на разбивку ФИО типа
Абу́ Али́ аль-Хаса́н ибн аль-Хаса́н ибн аль-Хайса́м аль-Басри́
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вырезать второе слово из строки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]