Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2011, 17:45   #1
Neymexa
Proffesional
Форумчанин
 
Аватар для Neymexa
 
Регистрация: 18.11.2008
Сообщений: 417
По умолчанию Преобразование записей в столбце

БД MS SQL

Есть таблица T в ней столбец k там записи формата
50:64:0010207:1
но есть и немного неправильные такие как

50:10:010405:28 (ранее -50:10:010405:3)

необходимо урезать до такого 50:10:010405:28
Как это сделать?
О, степь родимая, как я скучаю по тебе...
Neymexa вне форума Ответить с цитированием
Старый 27.10.2011, 04:30   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Если критерием обрезания является скобка, то вариант запроса такой:
Код:
update T set k =
  (CASE when CHARINDEX('(', k) > 0
   then SUBSTRING(k, 1, CHARINDEX('(', k)-2)  -- 2 - при наличии пробела перед скобкой
   else k
   end)
Можно и оптимальнее сделать (не трогая записи, где обрезания не требуется), но посложнее.
Прик вне форума Ответить с цитированием
Старый 27.10.2011, 08:44   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Можно и оптимальнее сделать (не трогая записи, где обрезания не требуется), но посложнее.
а по моему, именно так и разумнее поступить (исходя из личного опыта - чем меньше затрагивается записей в запросе, тем лучше!).

Да и не сильно это усложняет запрос:
Код:
update T set k =
  (CASE when CHARINDEX('(', k) > 2
   then SUBSTRING(k, 1, CHARINDEX('(', k)-2)  -- 2 - при наличии пробела перед скобкой
   else k
   end)
where CHARINDEX('(', k) > 2
p.s. кстати, запрос можно даже упросить. т.к. мы берём только те записи, где есть открывающая скобка, тогда можно записать так:
Код:
update T set k = SUBSTRING(k, 1, CHARINDEX('(', k)-2)  /* 2 - при наличии пробела перед скобкой */
where CHARINDEX('(', k) > 2
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.11.2011, 13:37   #4
Neymexa
Proffesional
Форумчанин
 
Аватар для Neymexa
 
Регистрация: 18.11.2008
Сообщений: 417
По умолчанию

всем огромное спасибо.

В продолжении не подскажите как найти последний символ.
Например последний пробел или последнее ':'

У меня еще есть записи типа

50:55:003 01 01:0005 и при выполнении

Код:
update Лист1_локальная set Kadastr_number =
  (CASE when CHARINDEX(' ', Kadastr_number) > 0
   then SUBSTRING(Kadastr_number, 1, CHARINDEX(' ', Kadastr_number)-1)  -- 2 - при наличии пробела перед скобкой
   else Kadastr_number
   end)
данная запись изменится хотя ее не нужно трогать
Думаю нужно искать последнее двоеточие и урезать после пробела после последнего двоеточия.

p.s. надеюсь поняли смысл
О, степь родимая, как я скучаю по тебе...
Neymexa вне форума Ответить с цитированием
Старый 02.11.2011, 13:52   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

в CHARINDEX третьим параметром можно указать с какого символа искать, но для поиска последнего вхождени не поможет, нужно небольшую пользовательскую функцию писать или использовать REVERSE поверх CHARINDEX

ADD
Вот примерчик добавил нахождения индекса последнего вхождения
Код:
  CASE WHEN CHARINDEX('а',REVERSE(Pole))=0 THEN 0 ELSE LEN(Pole)+1-CHARINDEX('а',REVERSE(Pole)) END
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 02.11.2011 в 14:09.
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск и замена в столбце Garrison Microsoft Office Excel 24 12.09.2012 17:31
поиск прогрессий в столбце simpleGo Microsoft Office Excel 18 06.12.2010 20:48
Макрос на сравнение и подсчет в первом столбце строк, и сумирование значений этих строк в другом столбце Shpr0T Microsoft Office Excel 8 30.08.2010 17:52
Замена в столбце siteograf Microsoft Office Excel 5 19.10.2009 02:27
Как посчитать кол-во разных записей в столбце и сделать двойную сортироку katlis Microsoft Office Excel 2 16.03.2009 17:09