{"id":299,"date":"2015-10-29T01:23:49","date_gmt":"2015-10-29T01:23:49","guid":{"rendered":"http:\/\/angelwings.net\/blog\/?p=299"},"modified":"2015-10-29T01:23:49","modified_gmt":"2015-10-29T01:23:49","slug":"database-mysql-split-value-from-one-field-to-two","status":"publish","type":"post","link":"https:\/\/angelwings.net\/blog\/database-mysql-split-value-from-one-field-to-two\/","title":{"rendered":"Database: MySQL Split value from one field to two"},"content":{"rendered":"<p>Source: http:\/\/stackoverflow.com\/questions\/2696884\/split-value-from-one-field-to-two<\/p>\n<div class=\"post-text\">\n<p>Unfortunately MySQL does not feature a split string function. However you can create a <a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.1\/en\/create-procedure.html\">user defined function<\/a> for this, such as the one described in the following article:<\/p>\n<ul>\n<li><a href=\"http:\/\/blog.fedecarg.com\/2009\/02\/22\/mysql-split-string-function\/\">MySQL Split String Function<\/a> by Federico Cargnelutti<\/li>\n<\/ul>\n<p>With that function, you would be able to build your query as follows:<\/p>\n<pre class=\"lang-sql prettyprint prettyprinted\"><code><span class=\"kwd\">SELECT<\/span><span class=\"pln\"> SPLIT_STR<\/span><span class=\"pun\">(<\/span><span class=\"pln\">membername<\/span><span class=\"pun\">,<\/span> <span class=\"str\">' '<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">1<\/span><span class=\"pun\">)<\/span> <span class=\"kwd\">as<\/span><span class=\"pln\"> memberfirst<\/span><span class=\"pun\">,<\/span><span class=\"pln\">\n       SPLIT_STR<\/span><span class=\"pun\">(<\/span><span class=\"pln\">membername<\/span><span class=\"pun\">,<\/span> <span class=\"str\">' '<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">2<\/span><span class=\"pun\">)<\/span> <span class=\"kwd\">as<\/span><span class=\"pln\"> memberlast\n<\/span><span class=\"kwd\">FROM<\/span><span class=\"pln\">   users<\/span><span class=\"pun\">;<\/span><\/code><\/pre>\n<p>If you prefer not to use a user defined function and you do not mind the query to be a bit more verbose, you can also do the following:<\/p>\n<pre class=\"lang-sql prettyprint prettyprinted\"><code><span class=\"kwd\">SELECT<\/span><span class=\"pln\"> SUBSTRING_INDEX<\/span><span class=\"pun\">(<\/span><span class=\"pln\">SUBSTRING_INDEX<\/span><span class=\"pun\">(<\/span><span class=\"pln\">membername<\/span><span class=\"pun\">,<\/span> <span class=\"str\">' '<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">1<\/span><span class=\"pun\">),<\/span> <span class=\"str\">' '<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">-1<\/span><span class=\"pun\">)<\/span> <span class=\"kwd\">as<\/span><span class=\"pln\"> memberfirst<\/span><span class=\"pun\">,<\/span><span class=\"pln\">\n       SUBSTRING_INDEX<\/span><span class=\"pun\">(<\/span><span class=\"pln\">SUBSTRING_INDEX<\/span><span class=\"pun\">(<\/span><span class=\"pln\">membername<\/span><span class=\"pun\">,<\/span> <span class=\"str\">' '<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">2<\/span><span class=\"pun\">),<\/span> <span class=\"str\">' '<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">-1<\/span><span class=\"pun\">)<\/span> <span class=\"kwd\">as<\/span><span class=\"pln\"> memberlast\n<\/span><span class=\"kwd\">FROM<\/span><span class=\"pln\">   users<\/span><span class=\"pun\">;\n\n<\/span><\/code><\/pre>\n<div class=\"post-text\">\n<p>In case you don&#8217;t want to use a function, this query handles things cleaner than the other answers:<\/p>\n<pre class=\"lang-sql prettyprint prettyprinted\"><code><span class=\"kwd\">SELECT<\/span> <span class=\"kwd\">IF<\/span><span class=\"pun\">(<\/span><span class=\"pln\">\n        LOCATE<\/span><span class=\"pun\">(<\/span><span class=\"str\">' '<\/span><span class=\"pun\">,<\/span> <span class=\"pun\">`<\/span><span class=\"pln\">membername<\/span><span class=\"pun\">`)<\/span> <span class=\"pun\">&gt;<\/span> <span class=\"lit\">0<\/span><span class=\"pun\">,<\/span><span class=\"pln\">\n        SUBSTRING<\/span><span class=\"pun\">(`<\/span><span class=\"pln\">membername<\/span><span class=\"pun\">`,<\/span> <span class=\"lit\">1<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> LOCATE<\/span><span class=\"pun\">(<\/span><span class=\"str\">' '<\/span><span class=\"pun\">,<\/span> <span class=\"pun\">`<\/span><span class=\"pln\">membername<\/span><span class=\"pun\">`)<\/span> <span class=\"pun\">-<\/span> <span class=\"lit\">1<\/span><span class=\"pun\">),<\/span>\n        <span class=\"pun\">`<\/span><span class=\"pln\">membername<\/span><span class=\"pun\">`<\/span>\n    <span class=\"pun\">)<\/span> <span class=\"kwd\">AS<\/span><span class=\"pln\"> memberfirst<\/span><span class=\"pun\">,<\/span>\n    <span class=\"kwd\">IF<\/span><span class=\"pun\">(<\/span><span class=\"pln\">\n        LOCATE<\/span><span class=\"pun\">(<\/span><span class=\"str\">' '<\/span><span class=\"pun\">,<\/span> <span class=\"pun\">`<\/span><span class=\"pln\">membername<\/span><span class=\"pun\">`)<\/span> <span class=\"pun\">&gt;<\/span> <span class=\"lit\">0<\/span><span class=\"pun\">,<\/span><span class=\"pln\">\n        SUBSTRING<\/span><span class=\"pun\">(`<\/span><span class=\"pln\">membername<\/span><span class=\"pun\">`,<\/span><span class=\"pln\"> LOCATE<\/span><span class=\"pun\">(<\/span><span class=\"str\">' '<\/span><span class=\"pun\">,<\/span> <span class=\"pun\">`<\/span><span class=\"pln\">membername<\/span><span class=\"pun\">`)<\/span> <span class=\"pun\">+<\/span> <span class=\"lit\">1<\/span><span class=\"pun\">),<\/span>\n        <span class=\"kwd\">NULL<\/span>\n    <span class=\"pun\">)<\/span> <span class=\"kwd\">AS<\/span><span class=\"pln\"> memberlast\n<\/span><span class=\"kwd\">FROM<\/span> <span class=\"pun\">`<\/span><span class=\"kwd\">user<\/span><span class=\"pun\">`;<\/span><\/code><\/pre>\n<p>Compared to other answers <strong>this approach takes care of:<\/strong><\/p>\n<ul>\n<li>membername <em>values without a space<\/em>: it will add the whole string to memberfirst and sets memberlast to NULL.<\/li>\n<li>membername <em>values that have multiple spaces<\/em>: it will add everything before the first space to memberfirst and the remainder (including additional spaces) to memberlast.<\/li>\n<\/ul>\n<p>The UPDATE version would be:<\/p>\n<pre class=\"lang-sql prettyprint prettyprinted\"><code><span class=\"kwd\">UPDATE<\/span> <span class=\"pun\">`<\/span><span class=\"kwd\">user<\/span><span class=\"pun\">`<\/span> <span class=\"kwd\">SET<\/span>\n    <span class=\"pun\">`<\/span><span class=\"pln\">memberfirst<\/span><span class=\"pun\">`<\/span> <span class=\"pun\">=<\/span> <span class=\"kwd\">IF<\/span><span class=\"pun\">(<\/span><span class=\"pln\">\n        LOCATE<\/span><span class=\"pun\">(<\/span><span class=\"str\">' '<\/span><span class=\"pun\">,<\/span> <span class=\"pun\">`<\/span><span class=\"pln\">membername<\/span><span class=\"pun\">`)<\/span> <span class=\"pun\">&gt;<\/span> <span class=\"lit\">0<\/span><span class=\"pun\">,<\/span><span class=\"pln\">\n        SUBSTRING<\/span><span class=\"pun\">(`<\/span><span class=\"pln\">membername<\/span><span class=\"pun\">`,<\/span> <span class=\"lit\">1<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> LOCATE<\/span><span class=\"pun\">(<\/span><span class=\"str\">' '<\/span><span class=\"pun\">,<\/span> <span class=\"pun\">`<\/span><span class=\"pln\">membername<\/span><span class=\"pun\">`)<\/span> <span class=\"pun\">-<\/span> <span class=\"lit\">1<\/span><span class=\"pun\">),<\/span>\n        <span class=\"pun\">`<\/span><span class=\"pln\">membername<\/span><span class=\"pun\">`<\/span>\n    <span class=\"pun\">),<\/span>\n    <span class=\"pun\">`<\/span><span class=\"pln\">memberlast<\/span><span class=\"pun\">`<\/span> <span class=\"pun\">=<\/span> <span class=\"kwd\">IF<\/span><span class=\"pun\">(<\/span><span class=\"pln\">\n        LOCATE<\/span><span class=\"pun\">(<\/span><span class=\"str\">' '<\/span><span class=\"pun\">,<\/span> <span class=\"pun\">`<\/span><span class=\"pln\">membername<\/span><span class=\"pun\">`)<\/span> <span class=\"pun\">&gt;<\/span> <span class=\"lit\">0<\/span><span class=\"pun\">,<\/span><span class=\"pln\">\n        SUBSTRING<\/span><span class=\"pun\">(`<\/span><span class=\"pln\">membername<\/span><span class=\"pun\">`,<\/span><span class=\"pln\"> LOCATE<\/span><span class=\"pun\">(<\/span><span class=\"str\">' '<\/span><span class=\"pun\">,<\/span> <span class=\"pun\">`<\/span><span class=\"pln\">membername<\/span><span class=\"pun\">`)<\/span> <span class=\"pun\">+<\/span> <span class=\"lit\">1<\/span><span class=\"pun\">),<\/span>\n        <span class=\"kwd\">NULL<\/span>\n    <span class=\"pun\">);<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Source: http:\/\/stackoverflow.com\/questions\/2696884\/split-value-from-one-field-to-two Unfortunately MySQL does not feature a split string function. However you can create a user defined function for this, such as the one described in the following article: MySQL Split String Function by Federico Cargnelutti With that function, you would be able to build your query as follows: SELECT SPLIT_STR(membername, &#8216; &#8216;, 1) [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[89],"class_list":["post-299","post","type-post","status-publish","format-standard","hentry","category-database","tag-mysql"],"_links":{"self":[{"href":"https:\/\/angelwings.net\/blog\/wp-json\/wp\/v2\/posts\/299","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/angelwings.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/angelwings.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/angelwings.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/angelwings.net\/blog\/wp-json\/wp\/v2\/comments?post=299"}],"version-history":[{"count":0,"href":"https:\/\/angelwings.net\/blog\/wp-json\/wp\/v2\/posts\/299\/revisions"}],"wp:attachment":[{"href":"https:\/\/angelwings.net\/blog\/wp-json\/wp\/v2\/media?parent=299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/angelwings.net\/blog\/wp-json\/wp\/v2\/categories?post=299"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/angelwings.net\/blog\/wp-json\/wp\/v2\/tags?post=299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}