如何在mysql中拆分名称字符串?
例如:
name
-----
Sachin ramesh tendulkar
Rahul dravid
Run Code Online (Sandbox Code Playgroud)
将名称拆分为firstname,middlename,lastname
:
firstname middlename lastname
--------- ------------ ------------
sachin ramesh tendulkar
rahul dravid
Run Code Online (Sandbox Code Playgroud)
Jes*_*e C 154
我把这个答案分成了两(2)种方法.第一种方法将您的fullname字段分为名字,中间名和姓氏.如果没有中间名,则中间名将显示为NULL.
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(fullname, ' ', 1), ' ', -1) AS first_name,
If( length(fullname) - length(replace(fullname, ' ', ''))>1,
SUBSTRING_INDEX(SUBSTRING_INDEX(fullname, ' ', 2), ' ', -1) ,NULL)
as middle_name,
SUBSTRING_INDEX(SUBSTRING_INDEX(fullname, ' ', 3), ' ', -1) AS last_name
FROM registeredusers
Run Code Online (Sandbox Code Playgroud)
第二种方法将中间名视为姓氏的一部分.我们只会从您的fullname字段中选择firstname和lastname列.
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(fullname, ' ', 1), ' ', -1) AS first_name,
TRIM( SUBSTR(fullname, LOCATE(' ', fullname)) ) AS last_name
FROM registeredusers
Run Code Online (Sandbox Code Playgroud)
你可以用substr,locate,substring_index等做一些很酷的事情.检查手册是否存在一些真正的混淆.http://dev.mysql.com/doc/refman/5.0/en/string-functions.html
Jon*_*han 21
好吧,我没用过任何东西,所以我决定创建一个真正简单的分割功能,希望它有所帮助:
DECLARE inipos INTEGER;
DECLARE endpos INTEGER;
DECLARE maxlen INTEGER;
DECLARE item VARCHAR(100);
DECLARE delim VARCHAR(1);
SET delim = '|';
SET inipos = 1;
SET fullstr = CONCAT(fullstr, delim);
SET maxlen = LENGTH(fullstr);
REPEAT
SET endpos = LOCATE(delim, fullstr, inipos);
SET item = SUBSTR(fullstr, inipos, endpos - inipos);
IF item <> '' AND item IS NOT NULL THEN
USE_THE_ITEM_STRING;
END IF;
SET inipos = endpos + 1;
UNTIL inipos >= maxlen END REPEAT;
Run Code Online (Sandbox Code Playgroud)
Oli*_*ieu 16
这是我使用的分割功能:
--
-- split function
-- s : string to split
-- del : delimiter
-- i : index requested
--
DROP FUNCTION IF EXISTS SPLIT_STRING;
DELIMITER $
CREATE FUNCTION
SPLIT_STRING ( s VARCHAR(1024) , del CHAR(1) , i INT)
RETURNS VARCHAR(1024)
DETERMINISTIC -- always returns same results for same input parameters
BEGIN
DECLARE n INT ;
-- get max number of items
SET n = LENGTH(s) - LENGTH(REPLACE(s, del, '')) + 1;
IF i > n THEN
RETURN NULL ;
ELSE
RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(s, del, i) , del , -1 ) ;
END IF;
END
$
DELIMITER ;
SET @agg = "G1;G2;G3;G4;" ;
SELECT SPLIT_STRING(@agg,';',1) ;
SELECT SPLIT_STRING(@agg,';',2) ;
SELECT SPLIT_STRING(@agg,';',3) ;
SELECT SPLIT_STRING(@agg,';',4) ;
SELECT SPLIT_STRING(@agg,';',5) ;
SELECT SPLIT_STRING(@agg,';',6) ;
Run Code Online (Sandbox Code Playgroud)
您也可以使用bewlo:
SELECT SUBSTRING_INDEX(Name, ' ', 1) AS fname,
SUBSTRING_INDEX(SUBSTRING_INDEX(Name,' ', 2), ' ',-1) AS mname,
SUBSTRING_INDEX(Name, ' ', -1) as lname FROM mytable;
Run Code Online (Sandbox Code Playgroud)
MySQL中没有字符串分割功能。因此您必须创建自己的函数。这将为您提供帮助。有关此链接的更多详细信息。
CREATE FUNCTION SPLIT_STR(
x VARCHAR(255),
delim VARCHAR(12),
pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
delim, '');
Run Code Online (Sandbox Code Playgroud)
SELECT SPLIT_STR(string, delimiter, position)
Run Code Online (Sandbox Code Playgroud)
SELECT SPLIT_STR('a|bb|ccc|dd', '|', 3) as third;
+-------+
| third |
+-------+
| ccc |
+-------+
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
215504 次 |
最近记录: |