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



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

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


А если фамилия не Иванов? Сразу бы советовали
select right(@str,6)
...
Рейтинг: 0 / 0
16.04.2018, 11:13
    #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
16.04.2018, 11:23
    #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
16.04.2018, 12:17
    #39630738
iap
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
16.04.2018, 13:34
    #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
16.04.2018, 13:55
    #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
16.04.2018, 13:57
    #39630804
шК0ДЕР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезать второе слово из строки
U_rtqwecПомогите пожалуйста, есть строка, например Иван Иванов, как проще всего вырезать и вывести второе слово?

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

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

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

("А если б он вёз патроны?!" ©)
...
Рейтинг: 0 / 0
16.04.2018, 15:28
    #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
16.04.2018, 15:29
    #39630892
iap
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
16.04.2018, 15:31
    #39630893
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезать второе слово из строки
iap,

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

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


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