Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Опять вопрос по Обработке сток)))
 
 автор: sannyk   (06.09.2011 в 16:17)   письмо автору
 
 

нужно обрезать строку на первом знаке пунктуации (убрать все после него)

код
WHILE LOCATE('[[:punct:]]',new_name)>0 DO
BEGIN
 SET new_name=SUBSTRING(new_name,1,LOCATE('[[:punct:]]',new_name)-1);
  END;
  END WHILE;

работает только если вместо '[[:punct:]]' поставить какойто символ - , или ! например
Есть идеи?

похожая ситуация с поднятием регистра второго слова в строке(((
while locate(' ',new_name)>0 do
begin
SET new_name=CONCAT(SUBSTR(new_name,1,LOCATE(' ',new_name)), upper(substr(new_name,locate(' ',new_name)+1,
locate(' ',new_name)+1)), substr(new_name,locate(' 'new_name)+2));
end; 
end while;

  Ответить  
 
 автор: cheops   (06.09.2011 в 16:24)   письмо автору
 
   для: sannyk   (06.09.2011 в 16:17)
 

А можно пример преобразуемой строки?

PS new_name - это переменная, параметр?

  Ответить  
 
 автор: sannyk   (06.09.2011 в 16:50)   письмо автору
19.5 Кб
 
   для: cheops   (06.09.2011 в 16:24)
 

переменная, пример в скрине справа.

  Ответить  
 
 автор: sannyk   (06.09.2011 в 18:56)   письмо автору
 
   для: sannyk   (06.09.2011 в 16:50)
 

Спасибо уже все сделал!
Кому интересно - вот результат!

DELIMITER //
CREATE FUNCTION norm_city (inp_str VARCHAR(255)) RETURNS VARCHAR(255) CHARSET latin1
BEGIN
DECLARE new_name VARCHAR(255);
DECLARE i INT DEFAULT 1;
DECLARE a INT DEFAULT 1;
SET new_name=LOWER(LTRIM(RTRIM(inp_str)));
WHILE new_name RLIKE '^[[:digit:]+[[:punct:]]' DO
BEGIN
SET new_name=SUBSTRING(new_name,2);
END;
END WHILE;
SET new_name=CONCAT(UPPER(SUBSTRING(new_name,1,1)), SUBSTRING(new_name,2));
WHILE LOCATE('  ',new_name)>0 DO
   BEGIN
   SET new_name=CONCAT(SUBSTR(new_name,1,LOCATE('  ',new_name)-1),SUBSTR(new_name, LOCATE('  ',new_name)+1));
   END;
END WHILE;
WHILE i<LENGTH(new_name) DO
IF SUBSTRING(new_name,i,1) REGEXP '[[:punct:]]' THEN 
BEGIN
SET new_name=SUBSTRING(new_name,1,i); 
  END;
 ELSE 
 BEGIN
SET i=i+1;
END;
END IF;
 END WHILE;
 WHILE new_name RLIKE '[[[:digit:]+[[:punct:]]$' DO
BEGIN
SET new_name=SUBSTRING(new_name,1,LENGTH(new_name)-1);
END;
END WHILE;
SET new_name=LTRIM(RTRIM(new_name));
WHILE a<LENGTH(new_name) DO
IF SUBSTRING(new_name,a,1) REGEXP '[[:space:]]' THEN 
BEGIN
SET new_name=CONCAT(SUBSTR(new_name,1,a), UPPER(SUBSTR(new_name,a+1,1)), 
SUBSTR(new_name,a+2));
SET a=a+1;
END; 
ELSE 
BEGIN
SET a=a+1;
END;
END IF;
END WHILE;
RETURN new_name;
END //
DELIMITER ;

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования