我有一個表與表用mysql字符串函數
abcd
abcd , pgw
ABcd , Pgw
以下數據我想輸出
Abcd
Abcd , Pgw
Abcd , Pgw
資本在首都的第一個字母和字母后「」。
我有一個表與表用mysql字符串函數
abcd
abcd , pgw
ABcd , Pgw
以下數據我想輸出
Abcd
Abcd , Pgw
Abcd , Pgw
資本在首都的第一個字母和字母后「」。
,使第一個字母大寫使用
select CONCAT(UPPER(LEFT(`field`, 1)), SUBSTRING(`field`, 2)) from mytable
做到這一點也給逗號後字聲明像一個函數:
DELIMITER ||
CREATE FUNCTION `ucwords`(str VARCHAR(128)) RETURNS VARCHAR(128) CHARSET latin1
BEGIN
DECLARE c CHAR(1);
DECLARE s VARCHAR(128);
DECLARE i INT DEFAULT 1;
DECLARE BOOL INT DEFAULT 1;
SET s = LCASE(str);
WHILE i < LENGTH(str) DO
BEGIN
SET c = SUBSTRING(s, i, 1);
IF c = ',' 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;
END IF;
END;
END IF;
SET i = i+1;
END;
END WHILE;
RETURN s;
END ||
DELIMITER ;
,並使用
select ucwords(`field`) from mytable
:它不working.please再次閱讀問題 –
我更新答案 –
看看這個解決方案mysql-update-script-problem-all-txt-is-lower-case-just-first-letter-is-upper-cas,它應該給你足夠的信息來適應你想要的東西O操作。將更新更改爲SELECT等。
它不起作用 –
它從來不是一個完整的工作解決方案,只是想讓你知道你能做什麼,你實際上也需要自己做一些工作。你究竟做了什麼沒有工作?發佈你剛剛嘗試過的更新。 –
請不要這樣做,如果你永遠期望您的數據庫能夠很好地擴展。如果您只是將它用於個人電話簿應用程序或同樣微小的數據集,那麼您可以按照您的建議在select
時間內完成此操作。但是,如果你想要一個健壯的可伸縮數據庫,你應該犧牲時間(速度)的空間(磁盤存儲空間)。 select語句上的每行函數很少能很好地進行縮放。
這樣做的一個久經考驗的方法是爲您已有的另一列添加相同的規範,並使用插入/更新觸發器以您希望的格式填充數據。
然後,只有當您必須(當數據更新時),而不是每次讀取數據時,轉換的成本纔會發生。這樣可以在整個讀取中分攤成本,這在大部分數據庫中都大大超過了寫入的成本。
This answer顯示了一個SQL公式,它似乎與您想要的接近,但我強烈建議您在觸發器中使用它,而不是每select
低效地運行它。
你必須給我們更多的信息... – juankysmith
那麼「一二三」呢?應該是「一二三」還是「一二三」? – Phil
@phil:一個兩個,三個 –