Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Множественная замена текста в таблице  [new]
yura sakun
Member

Откуда:
Сообщений: 9
здравствуйте, у меня есть таблица и в строке Lokation мне надо заменить текст вот то что я использую сейчас
update [dbo].[Attachments_kadru] set [Location] = replace ([Location] , '\31Декабрь2016' ,'\2016.12.31\31Декабрь2016') where [Location] like '%\31Декабрь2016%'
GO

но мне нужна замена сразу всех записей а их 100к, возможно ли сделать замену хотя бы сразу за один год, месяца всегда пишутся как
Декабрь, Январь и т.д
26 янв 18, 15:54    [21142223]     Ответить | Цитировать Сообщить модератору
 Re: Множественная замена текста в таблице  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Здравствуйте, для начала переименуйте таблицу в Location, это уже будет половина успеха.
26 янв 18, 16:27    [21142317]     Ответить | Цитировать Сообщить модератору
 Re: Множественная замена текста в таблице  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
*столбец
26 янв 18, 16:28    [21142322]     Ответить | Цитировать Сообщить модератору
 Re: Множественная замена текста в таблице  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
yura sakun, я наугад пишу, т.к. таблицы у меня такой нет, поэтому исправлением опечаток и отладкой сами занимайтесь, я общую идею даю.
Calendar - заранее подготовленная таблица с датами.

set language russian

    update att 
    set     [Location] = replace ([Location] , '\' + datename(day, c.date) + datename(month, c.date) + datename(year, c.date) 
                                           ,'\' + format(c.date, 'yyyy.MM.dd', 'en-US') + 
                                            '\' + datename(day, c.date) + datename(month, c.date) + datename(year, c.date))
    from    [dbo].[Attachments_kadru] att
            inner join Calendar c on att.[Location] like '%' + datename(day, c.date) + datename(month, c.date) + datename(year, c.date) + '%'
26 янв 18, 16:51    [21142371]     Ответить | Цитировать Сообщить модератору
 Re: Множественная замена текста в таблице  [new]
yura sakun
Member

Откуда:
Сообщений: 9
А вот если нет таблицы с датой
27 янв 18, 17:57    [21143903]     Ответить | Цитировать Сообщить модератору
 Re: Множественная замена текста в таблице  [new]
yura sakun
Member

Откуда:
Сообщений: 9
но есть столбец который называется UID и там записано вот примерно такое 02Декабрь2016
27 янв 18, 18:44    [21143983]     Ответить | Цитировать Сообщить модератору
 Re: Множественная замена текста в таблице  [new]
yura sakun
Member

Откуда:
Сообщений: 9
yura sakun,

Вот что там точно записанно 01Декабрь2016.222506
Это типа id после точки
27 янв 18, 18:48    [21143997]     Ответить | Цитировать Сообщить модератору
 Re: Множественная замена текста в таблице  [new]
yura sakun
Member

Откуда:
Сообщений: 9
Minamoto, а как сделать не с таблицей Calendar, а с столбцом тоже самое
27 янв 18, 19:22    [21144033]     Ответить | Цитировать Сообщить модератору
 Re: Множественная замена текста в таблице  [new]
Massa52
Member

Откуда:
Сообщений: 379
yura sakun,
set language russian
declare @c date = '20161230'
    update att 
    set @c = DATEADD(day, 1, @c), [Location] = replace ([Location] , '\' + datename(day, @c) + datename(month, @c) + datename(year, @c) 
                                           ,'\' + format(@c, 'yyyy.MM.dd', 'en-US') + 
                                            '\' + datename(day, @c) + datename(month, @c) + datename(year, @c))
    from    [dbo].[Attachments_kadru] att
    where att.[Location] like '%' + datename(day, @c) + datename(month, @c) + datename(year, @c) + '%'
28 янв 18, 10:47    [21144580]     Ответить | Цитировать Сообщить модератору
 Re: Множественная замена текста в таблице  [new]
yura sakun
Member

Откуда:
Сообщений: 9
Massa52, вы неправильно поняли как раз поиск мне, надо осуществлять как 01Декабрь2016, а не 2016.12.01, из другого столбца 01Декабрь2016 и типа как это правильно записать,потому что этих дне и этих годов много
28 янв 18, 23:05    [21145815]     Ответить | Цитировать Сообщить модератору
 Re: Множественная замена текста в таблице  [new]
invm
Member

Откуда: Москва
Сообщений: 9345
declare @t table (s varchar(50));
insert into @t
values
 ('\01Декабрь2016.222506'),
 ('\01Январь2017.222507'),
 ('\01Март2017.222508'),
 ('\01Октябрь2017.222509');

select * from @t;

update t
 set
  s = '\' + b.y + '.' + m.n + '.' + b.d + t.s
from
 @t t cross apply
 (select parsename(t.s, 2)) a(s) cross apply
 (select substring(a.s, 2, 2), stuff(stuff(a.s, len(a.s) - 3, 4, ''), 1, 3, ''), right(a.s, 4)) b(d, m, y) left join
 (
  values
   ('01', 'Январь'), ('02', 'Февраль'), ('03', 'Март'), ('04', 'Апрель'), ('05', 'Май'), ('06', 'Июнь'),
   ('07', 'Июль'), ('08', 'Август'), ('09', 'Сентябрь'), ('10', 'Октябрь'), ('11', 'Ноябрь'), ('12', 'Декабрь')
 ) m(n, mn) on m.mn = b.m;

select * from @t;
28 янв 18, 23:48    [21145840]     Ответить | Цитировать Сообщить модератору
 Re: Множественная замена текста в таблице  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
yura sakun
А вот если нет таблицы с датой
Тогда сделайте ее! Можете поискать на этом форуме - скорее всего уже не один раз давали скрипт создания такой таблицы. Даже если нет - создать ее - не великая проблема, рекурсивный CTE вам в помощь.
29 янв 18, 09:59    [21146194]     Ответить | Цитировать Сообщить модератору
 Re: Множественная замена текста в таблице  [new]
yura sakun
Member

Откуда:
Сообщений: 9
invm
declare @t table (s varchar(50));
insert into @t
values
 ('\01Декабрь2016.222506'),
 ('\01Январь2017.222507'),
 ('\01Март2017.222508'),
 ('\01Октябрь2017.222509');

select * from @t;

update t
 set
  s = '\' + b.y + '.' + m.n + '.' + b.d + t.s
from
 @t t cross apply
 (select parsename(t.s, 2)) a(s) cross apply
 (select substring(a.s, 2, 2), stuff(stuff(a.s, len(a.s) - 3, 4, ''), 1, 3, ''), right(a.s, 4)) b(d, m, y) left join
 (
  values
   ('01', 'Январь'), ('02', 'Февраль'), ('03', 'Март'), ('04', 'Апрель'), ('05', 'Май'), ('06', 'Июнь'),
   ('07', 'Июль'), ('08', 'Август'), ('09', 'Сентябрь'), ('10', 'Октябрь'), ('11', 'Ноябрь'), ('12', 'Декабрь')
 ) m(n, mn) on m.mn = b.m;

select * from @t;

как это сделать с конкретной таблицой?
29 янв 18, 11:44    [21146640]     Ответить | Цитировать Сообщить модератору
 Re: Множественная замена текста в таблице  [new]
yura sakun
Member

Откуда:
Сообщений: 9
Minamoto
yura sakun
А вот если нет таблицы с датой
Тогда сделайте ее! Можете поискать на этом форуме - скорее всего уже не один раз давали скрипт создания такой таблицы. Даже если нет - создать ее - не великая проблема, рекурсивный CTE вам в помощь.


я сделал как вы говорили но у меня ничего не изменяется в таблицы, я проверочную создал и там ничего не меняет
29 янв 18, 17:30    [21148184]     Ответить | Цитировать Сообщить модератору
 Re: Множественная замена текста в таблице  [new]
yura sakun
Member

Откуда:
Сообщений: 9
Помогите пожалуйста
30 янв 18, 18:58    [21152296]     Ответить | Цитировать Сообщить модератору
 Re: Множественная замена текста в таблице  [new]
VovkaJyk
Guest
/*
declare @t table (s varchar(50));
insert into @t
values
('\01Декабрь2016.222506'),
('\01Январь2017.222507'),
('\01Март2017.222508'),
('\01Октябрь2017.222509');
select * from @t;
*/

update t
set
s = '\' + b.y + '.' + m.n + '.' + b.d + t.s
from
[dbo].[Attachments_kadru] t cross apply
(select parsename(t.s, 2)) a(s) cross apply
(select substring(a.s, 2, 2), stuff(stuff(a.s, len(a.s) - 3, 4, ''), 1, 3, ''), right(a.s, 4)) b(d, m, y) left join
(
values
('01', 'Январь'), ('02', 'Февраль'), ('03', 'Март'), ('04', 'Апрель'), ('05', 'Май'), ('06', 'Июнь'),
('07', 'Июль'), ('08', 'Август'), ('09', 'Сентябрь'), ('10', 'Октябрь'), ('11', 'Ноябрь'), ('12', 'Декабрь')
) m(n, mn) on m.mn = b.m;

select * from [dbo].[Attachments_kadru];


просто напросто заменяете таблицу @t на вашу ([dbo].[Attachments_kadru]).
31 янв 18, 19:45    [21155577]     Ответить | Цитировать Сообщить модератору
 Re: Множественная замена текста в таблице  [new]
VovkaJyk
Guest
Виноват... название колонки с s на вашу также заменяете([Location])


/*
declare @t table (s varchar(50));
insert into @t
values
('\01Декабрь2016.222506'),
('\01Январь2017.222507'),
('\01Март2017.222508'),
('\01Октябрь2017.222509');
select * from @t;
*/

update t
set
[Location] = '\' + b.y + '.' + m.n + '.' + b.d + t.s
from
[dbo].[Attachments_kadru] t cross apply
(select parsename(t.s, 2)) a(s) cross apply
(select substring(a.s, 2, 2), stuff(stuff(a.s, len(a.s) - 3, 4, ''), 1, 3, ''), right(a.s, 4)) b(d, m, y) left join
(
values
('01', 'Январь'), ('02', 'Февраль'), ('03', 'Март'), ('04', 'Апрель'), ('05', 'Май'), ('06', 'Июнь'),
('07', 'Июль'), ('08', 'Август'), ('09', 'Сентябрь'), ('10', 'Октябрь'), ('11', 'Ноябрь'), ('12', 'Декабрь')
) m(n, mn) on m.mn = b.m;

select top 100 * from [dbo].[Attachments_kadru];
31 янв 18, 19:48    [21155580]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить