Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Разбор строки?  (Прочитано 12988 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Arinyshka
Белый клоун, бедный мученик...
Постоялец

by
Offline Offline
Пол: Женский

« : 20-08-2008 07:52 » 

SQL Server 2005. В таблице  Carsесть поле car_nomer, nvarchar (20). На данный момент в нем лежат номера машин - иногда кирилицей, иногда латиницей. Длина записей разная, строгой структуры не имеют.
Например МАЗ-МАН 23мн 25-78, 7109 ом, мн 35-56 и
Требуется заменить кирилические символы на латиницу по оговоренным правилам. Идея пока одна: временная таблица соответствия символов, цикл по каждому полю в каждой  записи, замена каждого символа в соответствии с таблицей. Я права? помогите, пожалуйста Улыбаюсь
Записан

Непонятная свобода обручем сдавила грудь...
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 20-08-2008 08:06 » 

насколько мне известно в Sql2005 появились regexp
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
McZim
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #2 : 20-08-2008 08:08 » 

А что будет если поступившая строка на обработку, например длиннее и не проходит по критериям? Допустим добавит обрезанную строку в новую таблицу, а потом? будете искать что и где потерялось? ИМХО не айс.
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Arinyshka
Белый клоун, бедный мученик...
Постоялец

by
Offline Offline
Пол: Женский

« Ответ #3 : 20-08-2008 08:12 » 

кинулась в гуглу читать... понятнее пока не стало Жаль
Записан

Непонятная свобода обручем сдавила грудь...
Arinyshka
Белый клоун, бедный мученик...
Постоялец

by
Offline Offline
Пол: Женский

« Ответ #4 : 20-08-2008 08:14 » 

в
А что будет если поступившая строка на обработку, например длиннее и не проходит по критериям? Допустим добавит обрезанную строку в новую таблицу, а потом? будете искать что и где потерялось? ИМХО не айс.
в смысле длиннее? таблица с номерами уже есть, это реальная база... просто вбивали в нее то русскими, то латинскими... и нужно преобразовать все к латинице. Длина поля ограничена 20 символами изначально... После преобразрования (однократного) все записи должны будут вноситься латиницей...
Записан

Непонятная свобода обручем сдавила грудь...
Вахмурка
Помогающий

ru
Offline Offline
Пол: Мужской
Программист


WWW
« Ответ #5 : 20-08-2008 08:45 » 

Arinyshka, как я понял для начала нужно создать трансляцию одного набора символов в другой типа CREATE TRANCLATION ну а потом в запросе с ёё помощью обновить таблицу. Ищи на эту тему.
Записан

Программа – это мысли спрессованные в код.
McZim
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #6 : 20-08-2008 08:48 » 

латиница и кирилица в одной и той же кодировке имеют разную длину.
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Arinyshka
Белый клоун, бедный мученик...
Постоялец

by
Offline Offline
Пол: Женский

« Ответ #7 : 20-08-2008 09:30 » 

Arinyshka, как я понял для начала нужно создать трансляцию одного набора символов в другой типа CREATE TRANCLATION ну а потом в запросе с ёё помощью обновить таблицу. Ищи на эту тему.
Да! именно так Улыбаюсь вам удалось четче сформулировать задачу Улыбаюсь
Записан

Непонятная свобода обручем сдавила грудь...
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 20-08-2008 09:58 » 

Если это одноразовая операция, и не будет проблем из-за длительной блокировки таблицы, я бы тупо курсором прошёлся по записям, а потом по символам строк Улыбаюсь Медленно, дубово, зато сразу понятно, что делать Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Arinyshka
Белый клоун, бедный мученик...
Постоялец

by
Offline Offline
Пол: Женский

« Ответ #9 : 20-08-2008 10:17 » 

работает Улыбаюсь Но я смогла это сделать, используя функцию и процедуру... А можно их объединить в одну процедуру? Типа подпрограммы Улыбаюсь
Функция меняет символы в соответствии с таблицей  Alphavit для конкретной строки... латинские буквы не трогает, кириллицу заменяет Улыбаюсь
Код:
CREATE FUNCTION dbo.translation_string (@temp_str_old nvarchar(20)
)
RETURNS nvarchar(20)
AS
BEGIN
DECLARE
@temp_b nvarchar(1),
@temp_str_new nvarchar(20),
@len tinyint,
@i int

set @len = datalength(@temp_str_old)
set @temp_str_new = ''
set @i = 1

while @i < @len
  begin
    if exists
      (select
        al.latin_b
      from Alphavit al
      where SUBSTRING(@temp_str_old, @i, 1) = al.Russian_b)
        begin   
      set @temp_b =
           (select
              al.latin_b
            from Alphavit al
            where SUBSTRING(@temp_str_old, @i, 1) = al.Russian_b)
        end   
     else   
         begin 
           set @temp_b = SUBSTRING(@temp_str_old, @i, 1)   
         end     
    set @temp_str_new = @temp_str_new + @temp_b
    set @i = @i + 1
  end
   
Return @temp_str_new 
END

А хранимая вызывает функцию для каждого поля:
Код:
CREATE PROCEDURE dbo.Car_translation_number
as
 update cars
 set car_nomer =dbo.translation_string (car_nomer)
Можно меня ругать за нереляционный подход Улыбаюсь А "пройтись курсором" я не умею - объясните, пожалуйста
« Последнее редактирование: 20-08-2008 10:23 от Arinyshka » Записан

Непонятная свобода обручем сдавила грудь...
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 20-08-2008 15:06 » 

Цитата: Arinyshka
А "пройтись курсором" я не умею - объясните, пожалуйста
Arinyshka, уже не нужно, раз ты UPDATE написала Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Arinyshka
Белый клоун, бедный мученик...
Постоялец

by
Offline Offline
Пол: Женский

« Ответ #11 : 21-08-2008 06:47 » 

уже не нужно
Каждый раз завидую Вашей подписи Улыбаюсь Постоянно ваяю что-нибудь в истеричном непонимании Улыбаюсь
Спасибо за помощь и поддержку Улыбаюсь
Записан

Непонятная свобода обручем сдавила грудь...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines