Split text by symbol: Difference between revisions

From LemonWiki共筆
Jump to navigation Jump to search
Line 18: Line 18:
# to get the second string ( 121.512532 ): {{code | code=SELECT TRIM(SUBSTRING_INDEX('25.040215, 121.512532' ,',', <span style="color:red">-1</span>))}}
# to get the second string ( 121.512532 ): {{code | code=SELECT TRIM(SUBSTRING_INDEX('25.040215, 121.512532' ,',', <span style="color:red">-1</span>))}}


[http://sqlfiddle.com/#!9/482e1/1/0 Live demo on SQL Fiddle]
[http://sqlfiddle.com/#!9/d90dc/2/0 Live demo on SQL Fiddle]
<pre>
<pre>
CREATE TABLE tbl(str varchar(50));
CREATE TABLE tbl(str varchar(50));
INSERT INTO tbl VALUES('25.040215, 121.512532');
INSERT INTO tbl VALUES('25.040215, 121.512532');
SELECT TRIM(SUBSTRING_INDEX(str ,',', 1)), TRIM(SUBSTRING_INDEX(str ,',', -1)) FROM tbl;
INSERT INTO tbl VALUES('123.456'); /*bad data*/
SELECT TRIM(SUBSTRING_INDEX(str ,',', 1)), TRIM(SUBSTRING_INDEX(str ,',', -1)) FROM tbl WHERE str LIKE '%,%';
</pre>
</pre>



Revision as of 13:02, 27 September 2015

Split text by symbol (another string, also called delimiter or separator)

Approaches

list of equivalent approaches to split text by symbol

Example

Task: Split the position e.g. 25.040215, 121.512532 by the comma ( , ) to obtain the latitude (1st string) and longitude (2nd string).

Expected output:

  • 25.040215
  • 121.512532

MySQL Approach

  1. to get the first string ( 25.040215 ): SELECT TRIM(SUBSTRING_INDEX('25.040215, 121.512532' ,',', 1))
  2. to get the second string ( 121.512532 ): SELECT TRIM(SUBSTRING_INDEX('25.040215, 121.512532' ,',', -1))

Live demo on SQL Fiddle

CREATE TABLE tbl(str varchar(50));
INSERT INTO tbl VALUES('25.040215, 121.512532');
INSERT INTO tbl VALUES('123.456'); /*bad data*/
SELECT TRIM(SUBSTRING_INDEX(str ,',', 1)), TRIM(SUBSTRING_INDEX(str ,',', -1)) FROM tbl WHERE str LIKE '%,%';

Excel Approach

1: parse data

parse data (資料剖析)

2: SUBSTRING_INDEX

A B C
1 25.040215, 121.512532
25.040215
121.512532

If the data set is perfect

  1. to get the first string ( 25.040215 ): B1 = MID( A1, 1, FIND(",", A1)-1)
  2. to get the second string ( 121.512532 ): C1 = MID( A1, FIND(",", A1)+1, LEN(A1))

if the data set was mixed with empty values. Return empty if the value is empty.

  1. to get the first string ( 25.040215 ): B1 = IF(ISERROR(MID(A1, 1, FIND(",", A1)-1)), "", MID(A1, 1, FIND(",", A1)-1))
  2. to get the second string ( 121.512532 ): C1 = IF(ISERROR(TRIM(MID(A1, FIND(",", A1)+1, LEN(A1)))), "", TRIM(MID(A1, FIND(",", A1)+1, LEN(A1)))


online demo (allow to edit)