powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Замена символов в строке!
8 сообщений из 8, страница 1 из 1
Замена символов в строке!
    #33365902
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток всем! Хотел бы обратиться к вам за помощью!
Вопрос достатолчно интересный! ase -11. Есть назначение платежа в лоадере, в нём корявые юзера ставят всякий отстой, который к сожалению не всегда выдерживает Sybase (изначально данные хранятся на sql - серваке). Конкретный вопрос заключается в том, как грамотно сделать поиск и замену корявых символов на пробелы, причём корявые символы могут всречаться неоднократно! Более конкретный вопрос - как написать конкретную процедурку по замене символов asci(char1) = 160 на asci (char2) = 20
...
Рейтинг: 0 / 0
Замена символов в строке!
    #33366040
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-как - взять и написать.

В 11 еще нет функции замены подстроки (string-replace кажется), поэтому замену надо производить путем присвоения выражения, в котором
вместо ненужного символа вставляется что-то еще , типа так :

Код: plaintext
1.
2.
select @idx = patindex(@str,'@')
select @str = substring(@str, 1 ,@idx- 1 ) + '_' + substring(@str,@idx+ 1 , 255 )
...
Рейтинг: 0 / 0
Замена символов в строке!
    #33366487
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если в данной строке несолько раз встречается данный символ? Основной вопрос заключался в этом!!!
...
Рейтинг: 0 / 0
Замена символов в строке!
    #33367010
Diaflex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
create procedure UniversalReplace
@parSourceStr DSCOMMENT ,
@parSearchStr DSCOMMENT ,
@parReplaceStr DSCOMMENT ,
@parDestinationStr DSCOMMENT OUTPUT

as
/*
OP_DISP.SQL

UniversalReplace - Процедура позволяет заменить в строке в все вхождения одной подстроки на другую.
Независит от платформы (вместо функции replace() существующей только в MS SQL).

@parSourceStr - исходная строка
@parSearchStr - искомая подстрока
@parreplaceStr - подстрока для

ничего не возвращает.
*/
begin
declare @locReplacePos INT -- позиция подстроки для замены

select @locReplacePos = patindex('%'+@parSearchStr+'%', @parSourceStr)

if (@locReplacePos > 0 )
begin
select @parDestinationStr = ''
while @locReplacePos > 0
begin
select @parDestinationStr = @parDestinationStr + substring(@parSourceStr, 1, @locReplacePos-1) + @parReplaceStr,
@parSourceStr = substring(@parSourceStr, @locReplacePos+len(@parSearchStr), len(@parSourceStr))
select @locReplacePos = patindex('%'+@parSearchStr+'%', @parSourceStr)
end
select @parDestinationStr = @parDestinationStr + @parSourceStr
end
else
select @parDestinationStr = @parSourceStr
end
go
...
Рейтинг: 0 / 0
Замена символов в строке!
    #33367266
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boogimanА если в данной строке несолько раз встречается данный символ? Основной вопрос заключался в этом!!!

Либо циклом, либо одно из двух ...

Можно еще написать оочень сложное выражение, символов в строке все равно конечное число -- не более 255.
...
Рейтинг: 0 / 0
Замена символов в строке!
    #33367630
Владимор Конев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivВ 11 еще нет функции замены подстроки (string-replace кажетсяТо есть, я в один шаг не смогу в исходной строке XY_Y_Y_Z заменить все сочетание символов Y_ на Y ???
Другими словами, я не смогу сделать вот так:
было XY_Y_Y_Z, применили один раз встроенную функцию, получили XYYYZ ???
Или-таки я могу так сделать?
...
Рейтинг: 0 / 0
Замена символов в строке!
    #33367681
Фотография Zhora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот кусок из триггера который делает примерно то что надо:
CREATE TRIGGER dbo.products_ins
ON dbo.products
FOR INSERT AS

declare
@rc int,
@syb_err int,
@affected_rows_pr int,
@affected_rows_po int,
@affected_rows_req int

--
-- Initialization Variables
--
select
@syb_err = @@error,
@affected_rows_pr = @@rowcount,
@affected_rows_po = 0,
@affected_rows_req = 0,
@rc = 0
--
-- Check error and qty of inserted rows in product
--
if @syb_err != 0 goto syb_err
if @affected_rows_pr = 0
return
/*******************************************************************************/
/* 05.30.02 E.K. Quotes replacing */
/* Any of symbols in [] in the col."security_description" */
/* table "products" ['"()] replaced by one space in loop (according to O.L.) */
/* self_recursion is off by default, so trigger will not fire again */
/*******************************************************************************/
--
-- Initialization loop variable with anything > 0
--
declare
@affected_rows_qts int
select
@affected_rows_qts = @affected_rows_pr /* Anything > 0 */
--
-- Looping through string for all updated with quotes rows
--
--if update (security_description) --or (for all other columns need to put under or and set clauses)
while (@affected_rows_qts > 0)
begin /* Loop */
update products
set prd.security_description = stuff(prd.security_description,patindex("%['()""]%",prd.security_description),1," ")
from products prd, inserted i
where patindex("%['()""]%",prd.security_description) > 0
and prd.cusip = i.cusip
--
-- Check error and qty of updated rows in product
--
select @syb_err = @@error,
@affected_rows_qts = @@rowcount
if @syb_err != 0 goto syb_err
end /* Loop */
--
-- Debug: Should be deleted
-- select i.security_description, prd.security_description
-- from products prd, inserted i
-- where prd.cusip = i.cusip
--
/********************************************************************************/
/* End 05.30.02 E.K. Quotes replacing */
/********************************************************************************/
...
Рейтинг: 0 / 0
Замена символов в строке!
    #33367834
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть, я в один шаг не смогу в исходной строке XY_Y_Y_Z заменить все сочетание символов Y_ на Y ???

Нет , в твоей версии не сможешь.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Замена символов в строке!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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