powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как удалить все после пробела
25 сообщений из 35, страница 1 из 2
Как удалить все после пробела
    #40062842
infinitidolla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такая функция

WHEN dt.Comment like 'Комиссия по договору эквайринга%' THEN LTRIM(SUBSTRING (dt.Comment, 32, 100))

И выдает эта функция номер договора но с датой например
и каким то еще текстом нужно все что после номера удалить
как вставить left и charindex помогите прошу вас! чтоб остался только номер договора

пишу так:
но не получается:
CASE
WHEN dt.Comment like 'Комиссия по договору эквайринга%' THEN LEFT (CHARINDEX (' ', LTRIM(SUBSTRING (dt.Comment, 32, 100))),' ')
WHEN dt.Comment like 'Требование по уплате комиссии за обслуживание по договору%' THEN LEFT (CHARINDEX (' ', LTRIM(SUBSTRING (dt.Comment, 58, 100))),' ')
WHEN dt.Comment like 'Комиссия за обслуживание по договору%' THEN LEFT (CHARINDEX (' ', LTRIM(SUBSTRING (dt.Comment, 37, 100))),' ')
WHEN dt.Comment like 'Возврат комиссии по договору эквайринга%' THEN LEFT (CHARINDEX (' ', LTRIM(SUBSTRING (dt.Comment, 40, 100))),' ')

ELSE 'Прочие проводки'
END as Dog1,
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40062844
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
infinitidolla,

ну вы хоть образец данных (лучше несколько) покажите и желаемый результат
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40062854
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
infinitidolla,

Вы вроде как длину строки, которую надо оставить знаете.

У CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] ) есть еще 3-й параметр
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40062903
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
infinitidolla,

а если завтра появится пятый вид комментария?
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40062923
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так обрезаю если вариантов немного
Код: sql
1.
2.
3.
4.
5.
6.
7.
CASE
WHEN dt.Comment like '%[^0-9][0-9][0-9]' THEN right(dt.Comment,2)
WHEN dt.Comment like '%[^0-9][0-9][0-9][0-9]' THEN right(dt.Comment,3)
WHEN dt.Comment like '%[^0-9][0-9][0-9][0-9][0-9]' THEN right(dt.Comment,4)

ELSE 'Прочие проводки'
END as Dog1,
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40062950
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
infinitidolla,

а если завтра появится пятый вид комментария?
- а если завтра появится пятый вид комментария?
- нуу, это надо всё переписывать, менять архитектуру...
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40062966
infinitidolla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad,
вот если так пишу то выгружает часть:

CASE
WHEN dt.Comment like 'Комиссия по договору эквайринга%' LTRIM(SUBSTRING (dt.Comment, 32, 100)))
WHEN dt.Comment like 'Требование по уплате комиссии за обслуживание по договору%' LTRIM(SUBSTRING (dt.Comment, 58, 100)))
WHEN dt.Comment like 'Комиссия за обслуживание по договору%' LTRIM(SUBSTRING (dt.Comment, 37, 100)))
WHEN dt.Comment like 'Возврат комиссии по договору эквайринга%' LTRIM(SUBSTRING (dt.Comment, 40, 100)))

ELSE 'Прочие проводки'
END as Dog1,
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40062968
infinitidolla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,


И главное в коде проблема то что связка идет по договору и обрезанному договору
я его выкладывала в предыдущем сообщении
код работал долгое время стали появляется новые комментарии и он сломался вот пытаюсь починить уже неск дней...
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40062970
infinitidolla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Focha,

объясните пожалуйста вот эту часть [^0-9][0-9][0-9][0-9][0-9][0-9]'
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40062973
infinitidolla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad,
вот такие комментарии из них надо вытащить только номер договора без дат

Комиссия за обслуживание по договору 01-ЭК-2020/097 от 19/08/2020
Комиссия за обслуживание по договору 484-17/эт от 23/03/2017
Комиссия за обслуживание по договору 76 от 01/09/2016
Требование по уплате комиссии за обслуживание по договору 00-эк-2018/725 от 05/03/2018
Требование по уплате комиссии за обслуживание по договору 01-ЭК-2020/169 от 02/12/2020
Возврат комиссии по договору эквайринга 00-эк-2017/572
Возврат комиссии по договору эквайринга 00-эк-2017/629 в дате 02/04/2021
Возврат комиссии по договору эквайринга 00-эк-2017/631 в дате 05/04/2021
Возврат комиссии по договору эквайринга 00-эк-2017/648

Комиссия по договору эквайринга 02-ЭК-2020/133 в дате 06/04/2021
Комиссия по договору эквайринга 02-ЭК-2020/133 в дате 07/04/2021
Комиссия по договору эквайринга 02-ЭК-2021/134
Комиссия по договору эквайринга 02-ЭК-2021/134 в дате 01/04/2021

Комиссия по договору эквайринга 84
Комиссия по договору эквайринга 70
Комиссия по договору эквайринга 91
Комиссия по договору эквайринга 97
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40062979
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
infinitidolla
Focha,

объясните пожалуйста вот эту часть [^0-9][0-9][0-9][0-9][0-9][0-9]'
Шаблон, который ищет последовательность из 6 цифр

infinitidolla
вот такие комментарии из них надо вытащить только номер договора без дат

Комиссия за обслуживание по договору 01-ЭК-2020/097 от 19/08/2020
Комиссия за обслуживание по договору 484-17/эт от 23/03/2017
Комиссия за обслуживание по договору 76 от 01/09/2016
Т.е. вам нужно найти первый символ цифру, и вырезать подстроку от неё до первого пробела?
Тогда так:
Код: sql
1.
2.
3.
4.
declare @s nvarchar(100) = N'Комиссия за обслуживание по договору 01-ЭК-2020/097 от 19/08/2020'

select @s as [строка], substring(@s, start, charindex(' ', @s, start) - start)  as [номер]
from (select @s as s, PATINDEX ('%[0-9]%', @s) as start) s
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40062981
infinitidolla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,
скажите пожалуйста как мне вставить это в свой код код я писала он очень длинный...
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40062984
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
infinitidolla
alexeyvg,
скажите пожалуйста как мне вставить это в свой код код я писала он очень длинный...
Ээээ, как же я подскажу, если я его не вижу? :-)

Найдите, где у вас выбирается поле Comment, оформите как подзапрос, что бы вычислить start через PATINDEX, потом выше его используйте в substring

По моему, использовать мой примитивный код ещё проще, чем придумать...
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40062987
infinitidolla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Модератор: Как и предупреждал, начинаю портянки стирать
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40062996
infinitidolla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad,очень сильно прошу помогите пожалуйста приписать это

Т.е. вам нужно найти первый символ цифру, и вырезать подстроку от неё до первого пробела?
Тогда так:
declare @s nvarchar(100) = N'Комиссия за обслуживание по договору 01-ЭК-2020/097 от 19/08/2020'

select @s as [строка], substring(@s, start, charindex(' ', @s, start) - start) as [номер]
from (select @s as s, PATINDEX ('%[0-9]%', @s) as start) s


к моему коду я его ниже выложила он очень сложный.
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40062997
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
declare @t table (s varchar(100));

insert into @t
values
 ('Комиссия за обслуживание по договору  01-ЭК-2020/097 от 19/08/2020'),
 ('Комиссия за обслуживание по договору 484-17/эт от 23/03/2017'),
 ('Комиссия за обслуживание по договору 76 от 01/09/2016'),
 ('Требование по уплате комиссии за обслуживание по договору 00-эк-2018/725 от 05/03/2018'),
 ('Требование по уплате комиссии за обслуживание по договору 01-ЭК-2020/169 от 02/12/2020'),
 ('Возврат комиссии по договору эквайринга 00-эк-2017/572'),
 ('Возврат комиссии по договору эквайринга 00-эк-2017/629 в дате 02/04/2021'),
 ('Возврат комиссии по договору эквайринга 00-эк-2017/631 в дате 05/04/2021'),
 ('Возврат комиссии по договору эквайринга 00-эк-2017/648'),

 ('Комиссия по договору эквайринга 02-ЭК-2020/133 в дате 06/04/2021'),
 ('Комиссия по договору эквайринга 02-ЭК-2020/133 в дате 07/04/2021'),
 ('Комиссия по договору эквайринга 02-ЭК-2021/134'),
 ('Комиссия по договору эквайринга 02-ЭК-2021/134 в дате 01/04/2021'),

 ('Комиссия по договору эквайринга 84'),
 ('Комиссия по договору эквайринга 70'),
 ('Комиссия по договору эквайринга 91'),
 ('Комиссия по договору эквайринга 97');

select
 t.s, d.num
from
 @t t cross apply
 (select cast(cast('' as xml).query('sql:column("t.s")') as nvarchar(max))) a(s) cross apply
 (select cast('<item>' + replace(a.s, ' ', '</item><item>') + '</item>' as xml)) b(x) outer apply
 (
  select top (1)
   x.v
  from
   (
    select
     c.n.value('text()[1]', 'varchar(100)'),
     lag(c.n.value('text()[1]', 'varchar(100)')) over (order by c.n)
    from
     b.x.nodes('item[not(empty(text()))]') c(n)
   ) x(v, v__prev)
  where
   x.v__prev in ('договору', 'эквайринга')
  order by
   nullif(x.v, 'эквайринга') desc
 ) d(num);
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40063000
infinitidolla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm, а если комментарии меняются каждый день????

очень прошу пожалуйста помогите приписать это в мой код !!


Т.е. вам нужно найти первый символ цифру, и вырезать подстроку от неё до первого пробела?
Тогда так:
declare @s nvarchar(100) = N'Комиссия за обслуживание по договору 01-ЭК-2020/097 от 19/08/2020'

select @s as [строка], substring(@s, start, charindex(' ', @s, start) - start) as [номер]
from (select @s as s, PATINDEX ('%[0-9]%', @s) as start) s


к моему коду я его ниже выложила он очень сложный.
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40063011
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
infinitidolla
komrad,
вот такие комментарии из них надо вытащить только номер договора без дат

здесь текстКомиссия за обслуживание по договору 01-ЭК-2020/097 от 19/08/2020
Комиссия за обслуживание по договору 484-17/эт от 23/03/2017
Комиссия за обслуживание по договору 76 от 01/09/2016
Требование по уплате комиссии за обслуживание по договору 00-эк-2018/725 от 05/03/2018
Требование по уплате комиссии за обслуживание по договору 01-ЭК-2020/169 от 02/12/2020
Возврат комиссии по договору эквайринга 00-эк-2017/572
Возврат комиссии по договору эквайринга 00-эк-2017/629 в дате 02/04/2021
Возврат комиссии по договору эквайринга 00-эк-2017/631 в дате 05/04/2021
Возврат комиссии по договору эквайринга 00-эк-2017/648

Комиссия по договору эквайринга 02-ЭК-2020/133 в дате 06/04/2021
Комиссия по договору эквайринга 02-ЭК-2020/133 в дате 07/04/2021
Комиссия по договору эквайринга 02-ЭК-2021/134
Комиссия по договору эквайринга 02-ЭК-2021/134 в дате 01/04/2021

Комиссия по договору эквайринга 84
Комиссия по договору эквайринга 70
Комиссия по договору эквайринга 91
Комиссия по договору эквайринга 97


а здесь код
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
with dt(Comment) as (
		select 'Комиссия за обслуживание по договору 01-ЭК-2020/097 от 19/08/2020'
union all select 'Комиссия за обслуживание по договору 484-17/эт от 23/03/2017'
union all select 'Комиссия за обслуживание по договору 76 от 01/09/2016'
union all select 'Требование по уплате комиссии за обслуживание по договору 00-эк-2018/725 от 05/03/2018'
union all select 'Требование по уплате комиссии за обслуживание по договору 01-ЭК-2020/169 от 02/12/2020'
union all select 'Возврат комиссии по договору эквайринга 00-эк-2017/572'
union all select 'Возврат комиссии по договору эквайринга 00-эк-2017/629 в дате 02/04/2021'
union all select 'Возврат комиссии по договору эквайринга 00-эк-2017/631 в дате 05/04/2021'
union all select 'Возврат комиссии по договору эквайринга 00-эк-2017/648'
union all select 'Комиссия по договору эквайринга 02-ЭК-2020/133 в дате 06/04/2021'
union all select 'Комиссия по договору эквайринга 02-ЭК-2020/133 в дате 07/04/2021'
union all select 'Комиссия по договору эквайринга 02-ЭК-2021/134'
union all select 'Комиссия по договору эквайринга 02-ЭК-2021/134 в дате 01/04/2021'

union all select 'Комиссия по договору эквайринга 84'
union all select 'Комиссия по договору эквайринга 70'
union all select 'Комиссия по договору эквайринга 91'
union all select 'Комиссия по договору эквайринга 97'
)

select 
Comment
,replace(
	replace(
	replace(
	replace(Comment
	,'Комиссия за обслуживание по договору ','')
	,'Требование по уплате комиссии за обслуживание по договору ','')
	,'Возврат комиссии по договору эквайринга ','')
	,'Комиссия по договору эквайринга ','') [Cut 1]
,left(
	replace(
	replace(
	replace(
	replace(Comment
	,'Комиссия за обслуживание по договору ','')
	,'Требование по уплате комиссии за обслуживание по договору ','')
	,'Возврат комиссии по договору эквайринга ','')
	,'Комиссия по договору эквайринга ','')
	,iif(charindex(' ',
			replace(
			replace(
			replace(
			replace(Comment
			,'Комиссия за обслуживание по договору ','')
			,'Требование по уплате комиссии за обслуживание по договору ','')
			,'Возврат комиссии по договору эквайринга ','')
			,'Комиссия по договору эквайринга ','')
					)
			=0
		, len(replace(
				replace(
				replace(
				replace(Comment
				,'Комиссия за обслуживание по договору ','')
				,'Требование по уплате комиссии за обслуживание по договору ','')
				,'Возврат комиссии по договору эквайринга ','')
				,'Комиссия по договору эквайринга ','')
				)
		,
		charindex(' ',
			replace(
			replace(
			replace(
			replace(Comment
			,'Комиссия за обслуживание по договору ','')
			,'Требование по уплате комиссии за обслуживание по договору ','')
			,'Возврат комиссии по договору эквайринга ','')
			,'Комиссия по договору эквайринга ','')
					))
		)  [Cut 2]
from dt 



кусок кода с left и до [Cut 2] и есть искомое
но его надо будет допиливать по мере поступления новых типов комментариев

PS код не гибкий и как постоянное решение не подходит
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40063013
infinitidolla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad, а это как постоянное решение поможет ???


nvm, а если комментарии меняются каждый день????

очень прошу пожалуйста помогите приписать это в мой код !!


Т.е. вам нужно найти первый символ цифру, и вырезать подстроку от неё до первого пробела?
Тогда так:
declare @s nvarchar(100) = N'Комиссия за обслуживание по договору 01-ЭК-2020/097 от 19/08/2020'

select @s as [строка], substring(@s, start, charindex(' ', @s, start) - start) as [номер]
from (select @s as s, PATINDEX ('%[0-9]%', @s) as start) s
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40063031
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Владислав Колосов
infinitidolla,

а если завтра появится пятый вид комментария?
- а если завтра появится пятый вид комментария?
- нуу, это надо всё переписывать, менять архитектуру...


Выделять деньги на проект... Золотое дно!
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40063036
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
infinitidolla
komrad, а это как постоянное решение поможет ???

nvm, а если комментарии меняются каждый день????

очень прошу пожалуйста помогите приписать это в мой код !!


Т.е. вам нужно найти первый символ цифру, и вырезать подстроку от неё до первого пробела?
Тогда так:
declare @s nvarchar(100) = N'Комиссия за обслуживание по договору 01-ЭК-2020/097 от 19/08/2020'

select @s as [строка], substring(@s, start, charindex(' ', @s, start) - start) as [номер]
from (select @s as s, PATINDEX ('%[0-9]%', @s) as start) s


Если вы не понимаете как это трансформировать в нужный вам код, то это задание не надо делать.
Следующее задание может быть сложнее и с ним вы тоже на форум пойдете?
Вы хоть на тестовой базе это делаете или сразу на боевой?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
substring(Comment
				,PATINDEX ('%[0-9]%', Comment)
				,iif(
						charindex(' '
							,Comment
							,PATINDEX ('%[0-9]%', Comment)
							) 
						- PATINDEX ('%[0-9]%', Comment)>0
						,charindex(' ', Comment, PATINDEX ('%[0-9]%', Comment)) - PATINDEX ('%[0-9]%', Comment)
						,len(Comment)- PATINDEX ('%[0-9]%', Comment)+1
					)
				)


...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40063054
infinitidolla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad,
на тестовой конечно
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40063096
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
infinitidolla
komrad, а это как постоянное решение поможет ???

nvm, а если комментарии меняются каждый день????

очень прошу пожалуйста помогите приписать это в мой код !!


Не останавливайтесь, я записываю ваши комменты
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40063101
infinitidolla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad,

не сработало получается такие обрезки:

105-ар
310
01290_269RUB0701/20
19.03.2021г.
28
01/02-02/20
02/02-02/20
02/20
3799
20703-7047-04/КА
900.00
Обмен
2021г,
2021
7(985)-538-53-04.
Налог
...
Рейтинг: 0 / 0
Как удалить все после пробела
    #40063104
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
infinitidolla
komrad,

не сработало получается такие обрезки:


нет смысла показывать обрезки без оригинального текста
на том объеме, что вы привели, всё работает ок
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как удалить все после пробела
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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