2014-12-04 97 views
4

我想返回名爲'initials'的MySQL列中每個單詞的第一個字母。mysql選擇單元格中每個單詞的第一個字母

例如,我的表可能看起來像這樣:

|    project_unit    | initials | 
+---------------------------------------+----------+ 
|  Mbita Clinic Rehabilitation  | MCR | 
| Management Strategy for Thrips Cowpea | MSTC | 

有什麼建議?

+0

我認爲在mysql內置中沒有這個需求的直接字符串函數。儘管如果你也可以使用多個函數來實現,那將是很昂貴的,而不是用任何編程語言來完成它。 :) – 2014-12-04 10:58:24

+3

看起來像你想找到所有大寫字母。 – 2014-12-04 11:02:50

回答

1

您可以使用下面提到的功能來實現您的要求。

DELIMITER $$ 
CREATE FUNCTION split_string(split_string varchar(255),my_delimiter varchar(1)) RETURNS varchar(10) 
BEGIN 
DECLARE temp_string varchar(255); 
DECLARE occurance INT; 
DECLARE i INT; 
DECLARE temp_result varchar(10); 
DECLARE final_result varchar(10); 
SET temp_result = ''; 
SET occurance=length(split_string)-length(replace(split_string,' ',''))+1; 
    IF occurance > 0 then 
    set i=1; 
    while i <= occurance do 
     set temp_string = (select SUBSTRING_INDEX(SUBSTRING_INDEX(split_string, my_delimiter, i),my_delimiter ,-1)); 
     set temp_result = CONCAT(temp_result, SUBSTRING(temp_string,1,1)); 
     set i=i+1; 
    end while; 
    ELSE 
     set temp_result = SUBSTRING(split_string,1,1); 
    END IF; 
    set occurance=0; 
    SET final_result = temp_result; 
    RETURN (final_result); 
END $$ 
DELIMITER ; 

您可以使用它像這樣: SELECT Projcect_unit, split_string(Projcect_unit,' ') as initials FROM main_table;

1

由於MySQL不支持正則表達式替換,則需要首先包括UDF(û SER d efined ˚F油膏),你可以從this鏈接獲得。

一旦你的REGEXP_REPLACE功能,你可以簡單地使用

select regexp_replace('Mbita Clinic Rehabilitation', '[a-z ]', '') 

這將返回MRC

請注意,當前正則表達式將刪除小寫字母和空格,但如果您的字段可以包含數字或任何其他字符,您將不得不修改正則表達式。

希望這有助於。

1

MySql,所以你需要創建功能並沒有提供這樣的嘗試字符串操作功能,並調用函數查詢

DELIMITER $$ 
CREATE FUNCTION `GetUpperCase`(InputString VARCHAR(1024)) RETURNS varchar(1024) CHARSET latin1 
    DETERMINISTIC 
BEGIN 

    DECLARE return_string,inputDATA VARCHAR(1024); 
    DECLARE schar VARCHAR(1); 
    DECLARE string_length, char_code INT; 

    SET string_length = LENGTH(InputString); 
    SET inputDATA = InputString ; 
    SET return_string = ''; 
    WHILE string_length > 0 DO 
     SET schar = SUBSTRING(inputDATA FROM (-1 * string_length) FOR 1); 
     SET char_code = ORD(schar); 
     IF char_code >= 65 AND char_code <= 90 THEN 
      SET return_string = CONCAT(return_string, schar); 
     END IF; 
     SET string_length = string_length - 1; 
    END WHILE; 

    RETURN return_string; 
END $$ 
DELIMITER ; 

,並調用函數SQL選擇查詢

mysql> SELECT GetUpperCase("Mbita Clinic Rehabilitation Management Strategy for Thrips Cowpea") AS `initials`; 
+----------+ 
| initials | 
+----------+ 
| MCRMSTC | 
+----------+ 
+0

該函數顯示錯誤,當我在mysql中執行它 – alphy 2014-12-06 08:46:33

+0

什麼錯誤顯示? – Girish 2014-12-06 10:57:05

+1

ohh,是錯字錯誤..我錯過了'$$'功能結束後,我已經更新了答案,請現在嘗試 – Girish 2014-12-06 14:58:39

相關問題