|
|
|
| нужно обрезать строку на первом знаке пунктуации (убрать все после него)
код
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;
|
| |
|
|
|
|
|
|
|
для: sannyk
(06.09.2011 в 16:17)
| | А можно пример преобразуемой строки?
PS new_name - это переменная, параметр? | |
|
|
|
|
 19.5 Кб |
|
|
для: cheops
(06.09.2011 в 16:24)
| | переменная, пример в скрине справа. | |
|
|
|
|
|
|
|
для: 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 ;
|
| |
|
|
|