Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Задача на удаление символов в строке  [new]
Kareglazaya
Member

Откуда:
Сообщений: 7
Помогите реализовать задачку - вычеркнуть в заданной строке все буквы "а", стоящих на нечетных позициях. пробовала делать разными путями, но не получилось добиться нужного результата. не очень давно работаю с ms sql
15 дек 13, 19:48    [15295743]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
Glory
Member

Откуда:
Сообщений: 104751
Kareglazaya
пробовала делать разными путями

И вы покажите, какими именно ?
15 дек 13, 20:00    [15295783]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
Kareglazaya
Member

Откуда:
Сообщений: 7
Glory, не)
15 дек 13, 20:02    [15295789]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Kareglazaya,

ах сессия, сессия.....
лабы по БД.

declare @STR varchar(max), @OUT varchar(max)
set @STR = 'cdq;wjenjwbnasjxcdnkwndsi2ownsjqhwsfsgzqyfztagdjheifncsjuhfiaqn;qnjqhnkjwqsxakmnzkajkmwkhdwkcmkwjcklw'
set @OUT = '';

-- генерим номера с помошью CTE
WITH GenNumber AS(
          SELECT 1 N
UNION ALL SELECT N + 1 FROM GenNumber WHERE N < 100 /**/)


select top (100) percent @OUT = @OUT + p2.STR2
from GenNumber f -- функция генерации последовательности чисел от N до M с интервалом K
cross apply(select substring(@STR, f.N, 1)STR1, f.N % 2 IsCh) p1 -- бьем на символы и определяем четность
cross apply(select case when f.N % 2 = 1 and p1.STR1 = 'a' then '' else p1.STR1 end STR2) p2 -- если нечетная и == 'а' - заменяем на пустую строку.
order by f.N

select @OUT
16 дек 13, 08:26    [15296843]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
Jaffar
Member

Откуда:
Сообщений: 633
точнее вот так.
declare @STR varchar(max), @OUT varchar(max)
set @STR = 'cdq;wjenjwbnasjxcdnkwndsi2ownsjqhwsfsgzqyfztagdjheifncsjuhfiaqn;qnjqhnkjwqsxakmnzkajkmwkhdwkcmkwjcklw'
set @OUT = '';

-- генерим номера с помошью CTE
WITH GenNumber AS(
          SELECT 1 N
UNION ALL SELECT N + 1 FROM GenNumber WHERE N < len(@STR) /**/)


select top (100) percent @OUT = @OUT + p2.STR2
from GenNumber f -- функция генерации последовательности чисел от N до M с интервалом K
cross apply(select substring(@STR, f.N, 1)STR1, f.N % 2 IsCh) p1 -- бьем на символы и определяем четность
cross apply(select case when f.N % 2 = 1 and p1.STR1 = 'a' then '' else p1.STR1 end STR2) p2 -- если нечетная и == 'а' - заменяем на пустую строку.
order by f.N

select @OUT
16 дек 13, 08:27    [15296846]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
step_ks
Member

Откуда:
Сообщений: 936
Jaffar
...
select top (100) percent @OUT = @OUT + p2.STR2
...
order by f.N

Не стоит рассчитывать, что это (конкатенация в порядке order by) будет везде и всегда работать.
И на top (100) оптимизатор здесь кладет болт.
16 дек 13, 09:27    [15296993]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
iap
Member

Откуда: Москва
Сообщений: 47083
step_ks
И на top (100) оптимизатор здесь кладет болт.
Он это делает не на TOP(100),
а на TOP(100) PERCENT
16 дек 13, 09:34    [15297010]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3393
iap,

А там и есть top 100 percent.
16 дек 13, 09:39    [15297025]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
declare @str varchar(100) = 'abcabcabc', @out varchar(100) = '';

select @out = @out + case when substring( @str, number, 1 ) = 'a' 
                           and number%2 = 1 
                          then '' 
                          else substring( @str, number, 1 ) 
                     end
  from master..spt_values
  where type = 'P' and number between 1 and len( @str );

select @out as new_str
16 дек 13, 09:43    [15297035]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
iap
Member

Откуда: Москва
Сообщений: 47083
Ennor Tiegael
iap,

А там и есть top 100 percent.
В процитированном высказывании step_ks - нет
16 дек 13, 09:48    [15297051]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
step_ks
Member

Откуда:
Сообщений: 936
iap
Ennor Tiegael
iap,

А там и есть top 100 percent.
В процитированном высказывании step_ks - нет

немножко не докопипастил, да.
16 дек 13, 10:02    [15297095]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
AlexandrPlus
Member

Откуда:
Сообщений: 7887
вот чисто алгоритмически красивей же надо

например

1. Заменить каждую нечетную букву X на X$
2. Вычеркнуть все a$
3. Вычеркнуть все оставшиеся $
16 дек 13, 10:32    [15297242]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
iap
Member

Откуда: Москва
Сообщений: 47083
AlexandrPlus
вот чисто алгоритмически красивей же надо

например

1. Заменить каждую нечетную букву X на X$
2. Вычеркнуть все a$
3. Вычеркнуть все оставшиеся $
А если там в тексте $ были изначально?
16 дек 13, 11:30    [15297578]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
AlexandrPlus
Member

Откуда:
Сообщений: 7887
iap
AlexandrPlus
вот чисто алгоритмически красивей же надо

например

1. Заменить каждую нечетную букву X на X$
2. Вычеркнуть все a$
3. Вычеркнуть все оставшиеся $
А если там в тексте $ были изначально?


ой, уличил 8)
PS В задаче - буквы.

А так преобразуй в unicode и используй символ рубля, которого очевидно еще на было, когда
преподы подбирали задачки. 8-)
И не ошибись, используя вместо армянскую букву Ке!
Картинка с другого сайта.
Картинка с другого сайта.

PS Армяне вроде просили ЦБ не использовать похожее их букву "Ке", но остались не услышаны.
16 дек 13, 11:52    [15297720]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
user89
Member

Откуда:
Сообщений: 2083
Kareglazaya
Помогите реализовать задачку - вычеркнуть в заданной строке все буквы "а", стоящих на нечетных позициях.
Очень похожая тема 15284788
И здесь также не совсем понял: заменить каждое нечетное вхождение или букву. Что надо получить из строки abcabcаabcaasdafg ?
16 дек 13, 12:00    [15297760]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
AlexandrPlus
Member

Откуда:
Сообщений: 7887
user89
Kareglazaya
Помогите реализовать задачку - вычеркнуть в заданной строке все буквы "а", стоящих на нечетных позициях.
Очень похожая тема 15284788
И здесь также не совсем понял: заменить каждое нечетное вхождение или букву. Что надо получить из строки abcabcаabcaasdafg ?


вопрос как сделать проще: пронумеровать все буквы и удалить все буквы "а" с нечетными номерами

в t-sql нет массивов (а точнее в этой роли - таблицы) и надо где-то учитывать текущий номер каждой буквы
16 дек 13, 12:18    [15297888]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
iap
Member

Откуда: Москва
Сообщений: 47083
Эх, давал я уже одной студентке свой вариант...
Неужели это опять она?!
DECLARE @S VARCHAR(max)='абракадабра';
SELECT
(
 SELECT C FROM
 (
  SELECT V.number,ROW_NUMBER()OVER(PARTITION BY SUBSTRING(@S,V.number,1)ORDER BY V.number),SUBSTRING(@S,V.number,1)
  FROM master.dbo.spt_values V
  WHERE type='P' AND V.number BETWEEN 1 AND LEN(@S)
 ) Y(N,RN,C)
 WHERE C<>'а' OR RN%2=0
 ORDER BY N
 FOR XML PATH(''),TYPE
).value('.','VARCHAR(MAX)') [@S];
Если это разные барышни, значит, "учатся" вместе...
16 дек 13, 20:52    [15301413]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
invm
Member

Откуда: Москва
Сообщений: 9719
iap
Неужели это опять она?!
iap
Если это разные барышни, значит, "учатся" вместе...
Нет, это просто разные преподы друг у друга задания тырят

Ну и я отмечусь:
declare @s1 varchar(100) = 'абра-кадабра', @s2 varchar(100);

with x as
(
 select
  charindex('а', @s1) as p, 1 as n, stuff(@s1, charindex('а', @s1), 1, '') as s
 
 union all
 
 select
  charindex('а', x.s, x.p) + sign(x.n % 2), x.n + 1, stuff(x.s, charindex('а', x.s, x.p), 1, case when x.n % 2 = 0 then '' else 'а' end)
 from
  x
 where
  charindex('а', x.s, x.p) > 0
)
select top (1) s from x order by n desc;


ЗЫ: Что преподавателю, что студенту(ке), приведенные решения - китайская грамота. И наверняка будут квалифицированы как неправильные. А "правильное" решение - банальный цикл
16 дек 13, 21:57    [15301647]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
hhhhhhh
Member

Откуда:
Сообщений: 3
Knyazev Alexey,
а можно ли вместо - master..spt_values
where type = 'P

создать свою таблицу?
17 дек 13, 23:07    [15307953]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
sdet
Member

Откуда:
Сообщений: 463
hhhhhhh
Knyazev Alexey,
а можно ли вместо - master..spt_values
where type = 'P

создать свою таблицу?

В реальных задачах такая таблица и создается поскольку spt_values ограничена числами до 2047
17 дек 13, 23:12    [15307979]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
hhhhhhh
Member

Откуда:
Сообщений: 3
sdet,
а как правильно ее создать, что делать с этим: where type = 'P' - как подобное в своей созданной таблице прописывать?? я не ас в sql :)
17 дек 13, 23:21    [15308029]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
sdet
Member

Откуда:
Сообщений: 463
hhhhhhh
sdet,
а как правильно ее создать, что делать с этим: where type = 'P' - как подобное в своей созданной таблице прописывать?? я не ас в sql :)

Это зависит от того какая информация будет в ней храниться кроме постоянных чисел
Если только числа создать (кол во задайте какое надо)
SELECT TOP 2147483647 IDENTITY(INT,0,1) AS N
INTO Numbers
FROM sysobjects a, sysobjects b, sysobjects c, sysobjects d, sysobjects e
ALTER TABLE dbo.Numbers ADD CONSTRAINT
PK_Numbers PRIMARY KEY CLUSTERED (N) 
17 дек 13, 23:36    [15308079]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
hhhhhhh
Member

Откуда:
Сообщений: 3
sdet,
ну вот если на этом примере

declare @str varchar(100) = 'abcabcabc', @out varchar(100) = '';

select @out = @out + case when substring( @str, number, 1 ) = 'a'
and number%2 = 1
then ''
else substring( @str, number, 1 )
end
from master..spt_values
where type = 'P' and number between 1 and len( @str );

select @out as new_str
17 дек 13, 23:42    [15308095]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
sdet
Member

Откуда:
Сообщений: 463
hhhhhhh,
Что вам не понятно? Как одно название заменить на другое, которое вы сами создадите?
17 дек 13, 23:52    [15308118]     Ответить | Цитировать Сообщить модератору
 Re: Задача на удаление символов в строке  [new]
step_ks
Member

Откуда:
Сообщений: 936
sdet
hhhhhhh
sdet,
а как правильно ее создать, что делать с этим: where type = 'P' - как подобное в своей созданной таблице прописывать?? я не ас в sql :)

Это зависит от того какая информация будет в ней храниться кроме постоянных чисел
Если только числа создать (кол во задайте какое надо)
SELECT TOP 2147483647 IDENTITY(INT,0,1) AS N
INTO Numbers
FROM sysobjects a, sysobjects b, sysobjects c, sysobjects d, sysobjects e
ALTER TABLE dbo.Numbers ADD CONSTRAINT
PK_Numbers PRIMARY KEY CLUSTERED (N) 

с identity() можно наловить дырок.
17 дек 13, 23:54    [15308122]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить