是否有可能在mysql中正確格式化一列?如何做一個mysql列的'正確的大小寫'格式?
例子:Proper("ABSALOM") = "Absalom"
我尋覓了很多,我覺得MySQL不具有任何內在的功能來做到這一點。是否有可能在MySQL中以任何其他方式執行此操作?
是否有可能在mysql中正確格式化一列?如何做一個mysql列的'正確的大小寫'格式?
例子:Proper("ABSALOM") = "Absalom"
我尋覓了很多,我覺得MySQL不具有任何內在的功能來做到這一點。是否有可能在MySQL中以任何其他方式執行此操作?
您可以結合CONCAT和字符串:
CONCAT(UCASE(SUBSTRING(`fieldName`, 1, 1)),LOWER(SUBSTRING(`fieldName`, 2)))
這是有效的。謝謝!! – 2011-05-31 01:05:07
@Shyam - 不要忘記接受答案,只需點擊答案旁邊的複選標記即可。 :) – 2011-05-31 01:14:14
這適用於單個單詞,但對於像「紐約」這樣的東西,你會得到「紐約」 – Ray 2013-03-26 21:25:59
你會認爲是世界上最流行的開源數據庫,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
的最佳解決方案田田 你是歡迎
這可能是一個愚蠢的問題,但你可以做'LCASE('Absalom')=「ABSALOM」',還是你需要檢查案件? – 2011-05-31 00:59:35
對不起老兄。那不行。再次閱讀問題。 – 2011-05-31 01:04:37
我相信我看過這個問題。 – 2011-05-31 01:05:36