2011-05-31 34 views
16

是否有可能在mysql中正確格式化一列?如何做一個mysql列的'正確的大小寫'格式?

例子:Proper("ABSALOM") = "Absalom"

我尋覓了很多,我覺得MySQL不具有任何內在的功能來做到這一點。是否有可能在MySQL中以任何其他方式執行此操作?

+0

這可能是一個愚蠢的問題,但你可以做'LCASE('Absalom')=「ABSALOM」',還是你需要檢查案件? – 2011-05-31 00:59:35

+0

對不起老兄。那不行。再次閱讀問題。 – 2011-05-31 01:04:37

+0

我相信我看過這個問題。 – 2011-05-31 01:05:36

回答

29

您可以結合CONCAT和字符串:

CONCAT(UCASE(SUBSTRING(`fieldName`, 1, 1)),LOWER(SUBSTRING(`fieldName`, 2))) 
+0

這是有效的。謝謝!! – 2011-05-31 01:05:07

+0

@Shyam - 不要忘記接受答案,只需點擊答案旁邊的複選標記即可。 :) – 2011-05-31 01:14:14

+5

這適用於單個單詞,但對於像「紐約」這樣的東西,你會得到「紐約」 – Ray 2013-03-26 21:25:59

11

你會認爲是世界上最流行的開源數據庫,MySQL的喜歡自稱,將有一個功能使項目冠軍的情況下(其中第一每個單詞的字母大寫)。可悲的是,事實並非如此。

這是我發現只要創建一個存儲過程/函數,它會做的伎倆

mysql> 
DROP FUNCTION IF EXISTS proper; 
SET GLOBAL log_bin_trust_function_creators=TRUE; 
DELIMITER | 
CREATE FUNCTION proper(str VARCHAR(128)) 
RETURNS VARCHAR(128) 
BEGIN 
DECLARE c CHAR(1); 
DECLARE s VARCHAR(128); 
DECLARE i INT DEFAULT 1; 
DECLARE bool INT DEFAULT 1; 
DECLARE punct CHAR(17) DEFAULT '()[]{},[email protected];:?/'; 
SET s = LCASE(str); 
WHILE i <= LENGTH(str) DO 
    BEGIN 
SET c = SUBSTRING(s, i, 1); 
IF LOCATE(c, punct) > 0 THEN 
SET bool = 1; 
ELSEIF bool=1 THEN 
BEGIN 
IF c >= 'a' AND c <= 'z' THEN 
BEGIN 
SET s = CONCAT(LEFT(s,i-1),UCASE(c),SUBSTRING(s,i+1)); 
SET bool = 0; 
END; 
ELSEIF c >= '0' AND c <= '9' THEN 
SET bool = 0; 
END IF; 
END; 
END IF; 
SET i = i+1; 
END; 
END WHILE; 
RETURN s; 
END; 
| 
DELIMITER ; 

然後

update table set col = proper(col) 

select proper(col) as properCOl 
from table 

的最佳解決方案田田 你是歡迎

+1

你的'update table set col = proper(col)'語法有錯誤。 – IIllIIll 2016-05-25 22:36:25

+0

感謝您的支持! – IIllIIll 2016-05-25 22:36:33

+0

@Arcrammer你好你提到了哪一個錯誤? – Pascal 2016-06-12 13:03:46

相關問題