दिलचस्प पोस्ट
स्टैक या ढेर में सी ++ में वैश्विक मेमोरी प्रबंधन? नकारात्मक संख्याओं के साथ मॉड्यूलो ऑपरेशन पेंटकंपनेन्ट काम नहीं करता है, अगर इसकी रिकर्सिव फ़ंक्शन द्वारा बुलाया जाता है? संदर्भ कॉल द्वारा std :: थ्रेड पास प्रतिलिपि कन्स्ट्रक्टर ValueTypes ऑब्जेक्ट (संदर्भ प्रकार) से कैसे प्राप्त करते हैं और अभी भी ValueTypes हैं? 32 बिट आवेदन से 64 बिट रजिस्ट्री पढ़ना एंड्रॉइड ओरिएंटेशन सेंसर के साथ अजीब व्यवहार Android DatePicker केवल महीना और वर्ष में परिवर्तन अजगर में वर्तमान फ़ाइल की निर्देशिका का पूरा पथ कैसे प्राप्त करें? आर में एक डेटा फ़ाइल की खाली पंक्तियों को निकालना प्ले 2.x: एक सामान्य बटन के साथ एक AJAX अनुरोध कैसे करें asp.net MVC आंशिक दृश्य नियंत्रक कार्रवाई किसी भी DOM तत्व के लिए संलग्न ईवेंट हैंडलर का निरीक्षण करें माइस्सिट बैश विंडोज 7 में बहुत ही धीमी है सी # सूची <स्ट्रिंग> सीमांकक के साथ स्ट्रिंग करने के लिए

कैसे mysql में नाम स्ट्रिंग विभाजित करने के लिए?

कैसे mysql में नाम स्ट्रिंग विभाजित करने के लिए?

उदाहरण के लिए:

name ----- Sachin ramesh tendulkar Rahul dravid 

firstname,middlename,lastname नाम जैसे firstname,middlename,lastname विभाजित करें:

 firstname middlename lastname --------- ------------ ------------ sachin ramesh tendulkar rahul dravid 

वेब के समाधान से एकत्रित समाधान "कैसे mysql में नाम स्ट्रिंग विभाजित करने के लिए?"

मैंने इस जवाब को दो (2) विधियों में विभाजित किया है पहली विधि आपके पूर्णनाम फ़ील्ड को पहले, मध्य और अंतिम नामों में अलग करेगी। कोई मध्य नाम नहीं है तो बीच का नाम शून्य के रूप में दिखाया जाएगा

 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 

यह दूसरा तरीका अंतिम नाम के भाग के रूप में मध्य नाम मानता है। हम केवल आपके फुलनेम फ़ील्ड से एक प्रथम नाम और अंतिम नाम का चयन करेंगे।

 SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(fullname, ' ', 1), ' ', -1) AS first_name, TRIM( SUBSTR(fullname, LOCATE(' ', fullname)) ) AS last_name FROM registeredusers 

कुछ अच्छी चीजें हैं जो आप substr के साथ कर सकते हैं, ढूँढें, substring_index, आदि। कुछ वास्तविक भ्रम के लिए मैनुअल की जांच करें। http://dev.mysql.com/doc/refman/5.0/en/string-functions.html

ठीक है, मैंने कुछ भी काम नहीं किया, इसलिए मैंने एक वास्तविक सरल विभाजन का निर्माण करने का निर्णय लिया, आशा है कि यह मदद करता है:

  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; 

यहां विभाजित फ़ंक्शन है जिसका उपयोग मैं करता हूं:

 -- -- 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) ; 

आप भी एक 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; 

अंतरिक्ष डीलिमीटर के दूसरे उदाहरण के बाद शेष स्ट्रिंग प्राप्त करने के लिए

 SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('Sachin ramesh tendulkar', ' ', 1), ' ', -1) AS first_name, SUBSTRING_INDEX(SUBSTRING_INDEX('Sachin ramesh tendulkar', ' ', 2), ' ', -1) AS middle_name, SUBSTRING('Sachin ramesh tendulkar',LENGTH(SUBSTRING_INDEX('Sachin ramesh tendulkar', ' ', 2))+1) AS last_name 
 SELECT p.fullname AS 'Fullname', SUBSTRING_INDEX(p.fullname, ' ', 1) AS 'Firstname', SUBSTRING(p.fullname, LOCATE(' ',p.fullname), (LENGTH(p.fullname) - (LENGTH(SUBSTRING_INDEX(p.fullname, ' ', 1)) + LENGTH(SUBSTRING_INDEX(p.fullname, ' ', -1)))) ) AS 'Middlename', SUBSTRING_INDEX(p.fullname, ' ', -1) AS 'Lastname', (LENGTH(p.fullname) - LENGTH(REPLACE(p.fullname, ' ', '')) + 1) AS 'Name Qt' FROM people AS p LIMIT 100; 

व्याख्या:

प्रथम नाम और अंतिम नाम ढूंढना आसान है, आपको बस SUBSTR_INDEX फ़ंक्शन का उपयोग करना है जादू जादू को मिडलनेम में होता है, जहां SUBSTR का इस्तेमाल किया गया था खोजने के लिए पहले स्थान की स्थिति और पूर्ण नाम का LENGTH – (LENGTH firstname + LENGTH lastname) सभी मिडलएनमैम प्राप्त करने के लिए

ध्यान दें कि LENGTH का पहला नाम और अंतिम नाम SUBSTR_INDEX का उपयोग करके गणना किया गया था

MySQL में कोई स्ट्रिंग स्प्लिट फ़ंक्शन नहीं है इसलिए आपको अपना फ़ंक्शन बनाना होगा नीचे दिए गए लिंक का उपयोग करें। यह आपकी मदद करेगा

http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/

स्पेस डिलीमीटर के दूसरे उदाहरण के बाद शेष स्ट्रिंग प्राप्त करने के लिए:

 SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(MsgRest, ' ', 1), ' ', -1) AS EMailID , SUBSTRING_INDEX(SUBSTRING_INDEX(MsgRest, ' ', 2), ' ', -1) AS DOB , IF( LOCATE(' ', `MsgRest`) > 0, TRIM(SUBSTRING(SUBSTRING(`MsgRest`, LOCATE(' ', `MsgRest`) +1), LOCATE(' ', SUBSTRING(`MsgRest`, LOCATE(' ', `MsgRest`) +1)) +1)), NULL ) AS Person FROM inbox 

आप आम_स्केमा का उपयोग कर सकते हैं और टोनकेकेज़ फ़ंक्शन का उपयोग कर सकते हैं। इसके बारे में अधिक जानकारी के लिए, लिंक का पालन करें। आपका कोड समाप्त होगा:

call tokenize(name, ' ');

हालांकि, ध्यान रखें कि कोई स्थान पहले और अंतिम नाम के लिए एक विश्वसनीय विभाजक नहीं है। उदाहरण के लिए स्पेन में दो अंतिम नाम होने के लिए आम बात है

 DELIMITER $$ DROP FUNCTION IF EXISTS `split_name`$$ CREATE FUNCTION split_name (p_fullname TEXT, p_part INTEGER) RETURNS TEXT READS SQL DATA BEGIN DECLARE v_words INT UNSIGNED; DECLARE v_name TEXT; SET p_fullname=RTRIM(LTRIM(p_fullname)); SET v_words=(SELECT SUM(LENGTH(p_fullname) - LENGTH(REPLACE(p_fullname, ' ', ''))+1)); IF v_words=1 THEN IF p_part=1 THEN SET v_name=p_fullname; ELSEIF p_part=2 THEN SET v_name=NULL; ELSEIF p_part=3 THEN SET v_name=NULL; ELSE SET v_name=NULL; END IF; ELSEIF v_words=2 THEN IF p_part=1 THEN SET v_name=SUBSTRING(p_fullname, 1, LOCATE(' ', p_fullname) - 1); ELSEIF p_part=2 THEN SET v_name=SUBSTRING(p_fullname, LOCATE(' ', p_fullname) + 1); ELSEIF p_part=3 THEN SET v_name=NULL; ELSE SET v_name=NULL; END IF; ELSEIF v_words=3 THEN IF p_part=1 THEN SET v_name=SUBSTRING(p_fullname, 1, LOCATE(' ', p_fullname) - 1); ELSEIF p_part=2 THEN SET p_fullname=SUBSTRING(p_fullname, LOCATE(' ', p_fullname) + 1); SET v_name=SUBSTRING(p_fullname, 1, LOCATE(' ', p_fullname) - 1); ELSEIF p_part=3 THEN SET p_fullname=REVERSE (SUBSTRING(p_fullname, LOCATE(' ', p_fullname) + 1)); SET p_fullname=SUBSTRING(p_fullname, 1, LOCATE(' ', p_fullname) - 1); SET v_name=REVERSE(p_fullname); ELSE SET v_name=NULL; END IF; ELSEIF v_words>3 THEN IF p_part=1 THEN SET v_name=SUBSTRING(p_fullname, 1, LOCATE(' ', p_fullname) - 1); ELSEIF p_part=2 THEN SET p_fullname=REVERSE(SUBSTRING(p_fullname, LOCATE(' ', p_fullname) + 1)); SET p_fullname=SUBSTRING(p_fullname, LOCATE(' ', p_fullname,SUBSTRING_INDEX(p_fullname,' ',1)+1) + 1); SET v_name=REVERSE(p_fullname); ELSEIF p_part=3 THEN SET p_fullname=REVERSE (SUBSTRING(p_fullname, LOCATE(' ', p_fullname) + 1)); SET p_fullname=SUBSTRING(p_fullname, 1, LOCATE(' ', p_fullname) - 1); SET v_name=REVERSE(p_fullname); ELSE SET v_name=NULL; END IF; ELSE SET v_name=NULL; END IF; RETURN v_name; END; 

 SELECT split_name('Md. Obaidul Haque Sarker',1) AS first_name, split_name('Md. Obaidul Haque Sarker',2) AS middle_name, split_name('Md. Obaidul Haque Sarker',3) AS last_name 

सबसे पहले नीचे प्रक्रिया बनाएं:

 CREATE DEFINER=`root`@`%` PROCEDURE `sp_split`(str nvarchar(6500), dilimiter varchar(15), tmp_name varchar(50)) BEGIN declare end_index int; declare part nvarchar(6500); declare remain_len int; set end_index = INSTR(str, dilimiter); while(end_index != 0) do /* Split a part */ set part = SUBSTRING(str, 1, end_index - 1); /* insert record to temp table */ call `sp_split_insert`(tmp_name, part); set remain_len = length(str) - end_index; set str = substring(str, end_index + 1, remain_len); set end_index = INSTR(str, dilimiter); end while; if(length(str) > 0) then /* insert record to temp table */ call `sp_split_insert`(tmp_name, str); end if; END 

इसके बाद प्रक्रिया को नीचे बनाएँ:

 CREATE DEFINER=`root`@`%` PROCEDURE `sp_split_insert`(tb_name varchar(255), tb_value nvarchar(6500)) BEGIN SET @sql = CONCAT('Insert Into ', tb_name,'(item) Values(?)'); PREPARE s1 from @sql; SET @paramA = tb_value; EXECUTE s1 USING @paramA; END 

कैसे कॉल परीक्षण

 CREATE DEFINER=`root`@`%` PROCEDURE `test_split`(test_text nvarchar(255)) BEGIN create temporary table if not exists tb_search ( item nvarchar(6500) ); call sp_split(test_split, ',', 'tb_search'); select * from tb_search where length(trim(item)) > 0; drop table tb_search; END call `test_split`('Apple,Banana,Mengo'); 
 CREATE DEFINER=`root`@`localhost` FUNCTION `getNameInitials`(`fullname` VARCHAR(500), `separator` VARCHAR(1)) RETURNS varchar(70) CHARSET latin1 DETERMINISTIC BEGIN DECLARE `result` VARCHAR(500) DEFAULT ''; DECLARE `position` TINYINT; SET `fullname` = TRIM(`fullname`); SET `position` = LOCATE(`separator`, `fullname`); IF NOT `position` THEN RETURN LEFT(`fullname`,1); END IF; SET `fullname` = CONCAT(`fullname`,`separator`); SET `result` = LEFT(`fullname`, 1); cycle: LOOP SET `fullname` = SUBSTR(`fullname`, `position` + 1); SET `position` = LOCATE(`separator`, `fullname`); IF NOT `position` OR NOT LENGTH(`fullname`) THEN LEAVE cycle; END IF; SET `result` = CONCAT(`result`,LEFT(`fullname`, 1)); -- SET `result` = CONCAT_WS(`separator`, `result`, `buffer`); END LOOP cycle; RETURN upper(`result`); END 

1.इस फ़ंक्शन को mysql में समझाओ 2.यह एक समारोह पैदा करेगा। अब आप कहीं भी इस फ़ंक्शन का उपयोग कर सकते हैं।

  SELECT `getNameInitials`('Kaleem Ul Hassan', ' ') AS `NameInitials`; 

3. उपरोक्त getNameInitails पहले पैरामीटर स्ट्रिंग है जिसे आप फ़िल्टर करना चाहते हैं और दूसरा दर्शक दर्शक है जिस पर आप आप स्ट्रिंग को अलग करना चाहते हैं। 4. उपरोक्त उदाहरण में 'कलीम उल हसन' नाम है और मुझे आद्याक्षर प्राप्त करना है और मेरा विभाजक स्थान '' है।