Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Народ! Выручайте! Поиск не помог / 16 сообщений из 16, страница 1 из 1
15.04.2005, 16:04
    #33018537
Vadimmm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Народ! Выручайте! Поиск не помог
Как в сайбэйзовом запросе заменить в поле символ один на другой? К примеру надо заменить в поле все двойные ковычки на одинарные. Голову сломал. В мссиквеле для этого функция replace, а в сайбэйзе нет:(
...
Рейтинг: 0 / 0
15.04.2005, 16:12
    #33018571
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Народ! Выручайте! Поиск не помог
VadimmmКак в сайбэйзовом запросе заменить в поле символ один на другой? К примеру надо заменить в поле все двойные ковычки на одинарные. Голову сломал. В мссиквеле для этого функция replace, а в сайбэйзе нет:(

В Sybase ASA есть REPLACE и на моей памяти (с anywhere 5.0 начиная) всегда была.

Сюда
...
Рейтинг: 0 / 0
15.04.2005, 16:13
    #33018573
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Народ! Выручайте! Поиск не помог
Александр Гoлдун пишет:

> В Sybase ASA есть REPLACE и на моей памяти (с anywhere 5.0 начиная)
> всегда была.

Обманул. REPLACE появилась в ASA 7
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
15.04.2005, 16:14
    #33018579
Litus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Народ! Выручайте! Поиск не помог
заменяем запятые на точки
update #f
set nalogsum = stuff(nalogsum,charindex(',',nalogsum),1,'.')
where charindex(',',nalogsum)>0
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
15.04.2005, 16:17
    #33018594
Vadimmm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Народ! Выручайте! Поиск не помог
Litusзаменяем запятые на точки
update #f
set nalogsum = stuff(nalogsum,charindex(',',nalogsum),1,'.')
where charindex(',',nalogsum)>0
Posted via ActualForum NNTP Server 1.1
Это замена одной запятой за один проход:( а надо убрать ВСЕ двойные ковычки, не зависимо от того, сколько их в строке.
...
Рейтинг: 0 / 0
15.04.2005, 16:18
    #33018597
Vadimmm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Народ! Выручайте! Поиск не помог
Александр Гoлдун
Александр Гoлдун пишет:

> В Sybase ASA есть REPLACE и на моей памяти (с anywhere 5.0 начиная)
> всегда была.

Обманул. REPLACE появилась в ASA 7
Posted via ActualForum NNTP Server 1.1

Извиняюсь. ASE 12.5
...
Рейтинг: 0 / 0
15.04.2005, 16:37
    #33018653
Litus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Народ! Выручайте! Поиск не помог
:-) Друг, ты сначала попробуй!
эта замена ВСЕХ запятых за один проход

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
15.04.2005, 16:41
    #33018669
Litus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Народ! Выручайте! Поиск не помог
:-( хм... и правда одной! давно это было :-((((
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
15.04.2005, 16:47
    #33018683
Litus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Народ! Выручайте! Поиск не помог
тады надо что нибудь типа:
update #f
set nalogsum = stuff(nalogsum,charindex(',',nalogsum),1,'.')
where charindex(',',nalogsum)>0
while @@rowcount <> 0
update #f
set nalogsum = stuff(nalogsum,charindex(',',nalogsum),1,'.')
where charindex(',',nalogsum)>0
end

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
15.04.2005, 16:50
    #33018695
Vadimmm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Народ! Выручайте! Поиск не помог
Litusтады надо что нибудь типа:
update #f
set nalogsum = stuff(nalogsum,charindex(',',nalogsum),1,'.')
where charindex(',',nalogsum)>0
while @@rowcount <> 0
update #f
set nalogsum = stuff(nalogsum,charindex(',',nalogsum),1,'.')
where charindex(',',nalogsum)>0
end

Posted via ActualForum NNTP Server 1.1

Это ближе, спасибо. Правда думаю тормозить будет. У меня порядка 50-ти полей и во всех надо сделать замену
...
Рейтинг: 0 / 0
15.04.2005, 17:01
    #33018732
Litus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Народ! Выручайте! Поиск не помог
число полей - ерунда! Вот записей сколько - это критичней.
думаю, что если меньше 50 тыщ, то это со свистом прокатит
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
15.04.2005, 17:04
    #33018742
DrNull
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Народ! Выручайте! Поиск не помог
Вылить BCP_ями табличку, заменить, залить обратно.
Можно сделать все оптом - имеет смысл для 50 полей :)
...
Рейтинг: 0 / 0
15.04.2005, 17:32
    #33018822
DrNull
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Народ! Выручайте! Поиск не помог
Кстати, покопался - нашел:
Код: plaintext
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.
create procedure RReplace
  @inSrcStr          varchar( 255 )       ,           
  @inSearchStr      varchar( 255 )       ,           
  @inReplStr     varchar( 255 )       ,           
  @OutStr varchar( 255 ) OUTPUT

as

begin
  declare
    @ReplacePos           INT      ,                
    @TmpStr            varchar( 255 ),                
    @TmpSearchStr      varchar( 255 ),                
    @TmpReplaceStr     varchar( 255 ),                
    @TmpOutStr varchar( 255 )                 


  select @TmpStr  = @inSrcStr
  select @TmpSearchStr  = @inSearchStr
  select @TmpReplaceStr = @inReplStr
  select @ReplacePos = patindex('%'+@TmpSearchStr+'%', @inSrcStr)

  if (@ReplacePos >  0  )
  begin
    select @TmpOutStr = ''
    while @ReplacePos >  0                        
    begin                                          
      select @TmpOutStr = @TmpOutStr + substring(@TmpStr,  1 , @ReplacePos- 1 ) + @locReplaceStr
      select @TmpStr = substring(@TmpStr, @ReplacePos+char_length(@TmpSearchStr), char_length(@TmpStr))
      select @ReplacePos = patindex('%'+@TmpSearchStr+'%', @TmpStr)
    end
    select @OutStr = @TmpOutStr + @TmpStr 
  end
  else
    select @OutStr = @TmpStr 
end
Курсорчик по табличке - вставка во временную и назад...
Можно даже без времянки обойтись...
...
Рейтинг: 0 / 0
15.04.2005, 17:40
    #33018859
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Народ! Выручайте! Поиск не помог
Гм - у меня сейчас сотрудница на эту замысловатую проблему из серии моего рассказа "Как плохо, когда не хватает очевидных вещей" изрекла дельную мысль - "А кто мешает им в ASA нужную табличку как прокси подрубить, сделать там UPDATE ... SET ... = REPLICACE() и одним махом все выполнить ?". Кстати по моему вариант легкий получается, хотя конечно в данном случае это разовое решение.
...
Рейтинг: 0 / 0
15.04.2005, 17:45
    #33018875
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Народ! Выручайте! Поиск не помог
Начиная с 12.5.0.3 можно так :

Код: plaintext
1.
2.
3.
4.
5.
6.
-- NB ! only for @@version >= 12.5.0.3
declare @s varchar( 10000 )
select @s = 'asdf"ghjkl"qwerty"zxcvb"102938'
select @s as 'before'
select @s = str_replace( @s, '"', '''' )
select @s as 'after'
...
Рейтинг: 0 / 0
18.04.2005, 10:05
    #33020393
Vadimmm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Народ! Выручайте! Поиск не помог
Всем спасибо. Помог способ Litus. Правда немного упростил. Первый апдейт не делал, т.к. там же всеравно инсерт перед этим в темповую таблицу, и @@rowcount установится инсертом:)
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Народ! Выручайте! Поиск не помог / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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