有沒有辦法重新處理MySQL中的條目,如下所示? (在大寫字符之前放置一個空格)我想不出這個問題的答案,並且看起來SQL並不是真正爲這種東西構建的。任何想法讚賞!大小寫分隔字符串操作MySQL
示例輸入:
| id |字符串|
| 1 | FannieMae |
| 2 | FreddyMac |
| 3 |阿瑟安德森|
示例輸出:
| id |字符串|
| 1 |聯邦抵押協會|
| 2 |弗雷迪麥克|
| 3 |亞瑟安徒生|
有沒有辦法重新處理MySQL中的條目,如下所示? (在大寫字符之前放置一個空格)我想不出這個問題的答案,並且看起來SQL並不是真正爲這種東西構建的。任何想法讚賞!大小寫分隔字符串操作MySQL
示例輸入:
| id |字符串|
| 1 | FannieMae |
| 2 | FreddyMac |
| 3 |阿瑟安德森|
示例輸出:
| id |字符串|
| 1 |聯邦抵押協會|
| 2 |弗雷迪麥克|
| 3 |亞瑟安徒生|
此功能會做你想要什麼:
DELIMITER $$
CREATE FUNCTION `InsertSpace`(s1 VARCHAR(1000))
RETURNS varchar(1000)
BEGIN
DECLARE rs VARCHAR(1000);
DECLARE ch BINARY;
DECLARE i int;
SET rs = SUBSTRING(s1,1,1);
SET i = 2;
label1: LOOP
SET ch = SUBSTRING(s1,i,1);
IF ((ch >= 'A') AND (ch <= 'Z')) THEN
SET rs = CONCAT(rs, ' ');
END IF;
SET rs = CONCAT(rs, ch);
SET i = i + 1;
IF i > LENGTH(s1) THEN
LEAVE label1;
END IF;
END LOOP label1;
RETURN rs;
END
注ch的聲明爲BINARY - 強制區分大小寫的比較。
然後使用
UPDATE myTable SET `String`=InsertSpace(`String`);
woops忘記提及,不使用功能。但是,謝謝你的時間! – OctaveParango
create table stuckTogether
( id int auto_increment primary key,
String varchar(200) not null
);
insert stuckTogether(String) values
('FannieMae'),
('FreddyMac'),
('ArthurAndersen'),
('DJMurphyZ');
功能:
DROP FUNCTION IF EXISTS separateStuck;
DELIMITER $$
CREATE FUNCTION separateStuck
( s VARCHAR(200)
)
RETURNS VARCHAR(200)
BEGIN
DECLARE sOut VARCHAR(200) DEFAULT '';
DECLARE iSize,iPos INT;
SET iSize=LENGTH(s);
SET iPos=1;
label1: WHILE iPos<=iSize DO
SET sOut=CONCAT(sOut,SUBSTRING(s,iPos,1));
IF ASCII(SUBSTRING(s,iPos,1)) BETWEEN 97 and 122 THEN
-- it is lowercase
IF iPos<iSize THEN
IF ASCII(SUBSTRING(s,iPos+1,1)) BETWEEN 65 and 90 THEN
-- the next one is upper case
SET sOut=CONCAT(sOut,' ');
END IF;
END IF;
END IF;
SET iPos=iPos+1;
END WHILE label1;
RETURN sOut;
END;$$
DELIMITER ;
測試:
select id,separateStuck(String) as String
from stuckTogether;
+----+-----------------+
| id | String |
+----+-----------------+
| 1 | Fannie Mae |
| 2 | Freddy Mac |
| 3 | Arthur Andersen |
| 4 | DJMurphy Z |
+----+-----------------+
woops忘記提及,不使用功能。但是,謝謝你的時間! – OctaveParango
我不認爲這是可能在MySQL簡單地做到這一點,因爲你會需要一種可以使用常規的替換功能用於查找替換子字符串的表達式,MySQL不具備此功能。顯然,你可以嵌入儘可能多的'replace()'調用,以達到預期的結果,但這是一項非常繁瑣的練習。 – Shadow
好點。我可以嵌套26替換語句作爲替換(字符串,'A','A')爲每個字母的字母..聽起來像我唯一的選擇:) – OctaveParango
或https://stackoverflow.com/questions/25938516/mysql- udf-that-do-regex-search-and-replace –