Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
Здравствуйте, для начала переименуйте таблицу в Location, это уже будет половина успеха. |
26 янв 18, 16:27 [21142317] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
*столбец |
26 янв 18, 16:28 [21142322] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
yura sakun Member Откуда: Сообщений: 9 |
А вот если нет таблицы с датой |
27 янв 18, 17:57 [21143903] Ответить | Цитировать Сообщить модератору |
yura sakun Member Откуда: Сообщений: 9 |
но есть столбец который называется UID и там записано вот примерно такое 02Декабрь2016 |
27 янв 18, 18:44 [21143983] Ответить | Цитировать Сообщить модератору |
yura sakun Member Откуда: Сообщений: 9 |
yura sakun, Вот что там точно записанно 01Декабрь2016.222506 Это типа id после точки |
27 янв 18, 18:48 [21143997] Ответить | Цитировать Сообщить модератору |
yura sakun Member Откуда: Сообщений: 9 |
Minamoto, а как сделать не с таблицей Calendar, а с столбцом тоже самое |
27 янв 18, 19:22 [21144033] Ответить | Цитировать Сообщить модератору |
Massa52 Member Откуда: Сообщений: 382 |
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] Ответить | Цитировать Сообщить модератору |
yura sakun Member Откуда: Сообщений: 9 |
Massa52, вы неправильно поняли как раз поиск мне, надо осуществлять как 01Декабрь2016, а не 2016.12.01, из другого столбца 01Декабрь2016 и типа как это правильно записать,потому что этих дне и этих годов много |
28 янв 18, 23:05 [21145815] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9646 |
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] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
|
||
29 янв 18, 09:59 [21146194] Ответить | Цитировать Сообщить модератору |
yura sakun Member Откуда: Сообщений: 9 |
как это сделать с конкретной таблицой? |
||
29 янв 18, 11:44 [21146640] Ответить | Цитировать Сообщить модератору |
yura sakun Member Откуда: Сообщений: 9 |
я сделал как вы говорили но у меня ничего не изменяется в таблицы, я проверочную создал и там ничего не меняет |
||||
29 янв 18, 17:30 [21148184] Ответить | Цитировать Сообщить модератору |
yura sakun Member Откуда: Сообщений: 9 |
Помогите пожалуйста |
30 янв 18, 18:58 [21152296] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
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 | ![]() |