Original post: http://anothermysqldba.blogspot.com/2014/12/findparse-string-from-within-string.html
所以,我注意到了一些不同的問題,並張貼關於解析字符串了另一個字符串最近。 雖然一些解決方案包括創建新的功能等也可以在某些情況下,一個單一的查詢內完成。
例如,讓我們說,我們正在尋找拉出從URL域。 我會盡量細講,為什麼和如何工作的。
我們有如下表。
這個例子的目的是無視http://或https://開頭和任何的.COM之後。 所以我們用locate找到位置。
在.COM引用是容易的,因為那是恆定的,所以我們可以與啟動。
OK,所以我們要刪除的/,什麼地方是什麼?
這給了我們我們的最終位置,我只把現場別名使結果更容易執行。
現在,經過HTTP和HTTPS整理其實是很容易的,以及它們都具有://之後他們,所以我們只需要第二的位置/字符串中。
這些查詢只是顯示了最終的查詢的不同方面會做。 因此,讓我們把它放在一起。
現在,希望可以幫助您能夠解析出任何你需要的。 本實施例被限制在一個網址。 但是,由於功能的一些例子已經在這裡是我的,你可以用它來解析任何你需要的功能的例子。
從全名外地拉一個姓氏:
拉頭名
授予的名稱例子,你需要知道的分隔符值。 但是,這只是一個例子,你可以建立在。
所以,我注意到了一些不同的問題,並張貼關於解析字符串了另一個字符串最近。 雖然一些解決方案包括創建新的功能等也可以在某些情況下,一個單一的查詢內完成。
例如,讓我們說,我們正在尋找拉出從URL域。 我會盡量細講,為什麼和如何工作的。
我們有如下表。
CREATE TABLE `parse_example` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`urldemo` varchar(150) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
+----+----------------------------+
| id | urldemo |
+----+----------------------------+
| 1 | http://www.mysql.com/ |
| 2 | http://www.percona.com/ |
| 3 | https://tools.percona.com/ |
| 4 | https://mariadb.com/ |
| 5 | http://planet.mysql.com/ |
| 6 | http://dev.mysql.com/doc/ |
+----+----------------------------+
這個例子的目的是無視http://或https://開頭和任何的.COM之後。 所以我們用locate找到位置。
在.COM引用是容易的,因為那是恆定的,所以我們可以與啟動。
SELECT LOCATE('.com', urldemo), urldemo FROM parse_example;
+-------------------------+----------------------------+
| LOCATE('.com', urldemo) | urldemo |
+-------------------------+----------------------------+
| 17 | http://www.mysql.com/ |
| 19 | http://www.percona.com/ |
| 22 | https://tools.percona.com/ |
| 16 | https://mariadb.com/ |
| 20 | http://planet.mysql.com/ |
| 17 | http://dev.mysql.com/doc/ |
+-------------------------+----------------------------+
OK,所以我們要刪除的/,什麼地方是什麼?
SELECT LOCATE('.com', urldemo) as start, LOCATE('.com', urldemo) +4 as end, SUBSTRING(urldemo FROM LOCATE('.com', urldemo) + 4 ) AS resulting , urldemo FROM parse_example;
+-------+-----+-----------+----------------------------+
| start | end | resulting | urldemo |
+-------+-----+-----------+----------------------------+
| 17 | 21 | / | http://www.mysql.com/ |
| 19 | 23 | / | http://www.percona.com/ |
| 22 | 26 | / | https://tools.percona.com/ |
| 16 | 20 | / | https://mariadb.com/ |
| 20 | 24 | / | http://planet.mysql.com/ |
| 17 | 21 | /doc/ | http://dev.mysql.com/doc/ |
+-------+-----+-----------+----------------------------+
這給了我們我們的最終位置,我只把現場別名使結果更容易執行。
現在,經過HTTP和HTTPS整理其實是很容易的,以及它們都具有://之後他們,所以我們只需要第二的位置/字符串中。
SELECT LOCATE('/', urldemo) as first, LOCATE('/', urldemo) +1 as second, urldemo
FROM parse_example;
+-------+--------+----------------------------+
| first | second | urldemo |
+-------+--------+----------------------------+
| 6 | 7 | http://www.mysql.com/ |
| 6 | 7 | http://www.percona.com/ |
| 7 | 8 | https://tools.percona.com/ |
| 7 | 8 | https://mariadb.com/ |
| 6 | 7 | http://planet.mysql.com/ |
| 6 | 7 | http://dev.mysql.com/doc/ |
+-------+--------+----------------------------+
這些查詢只是顯示了最終的查詢的不同方面會做。 因此,讓我們把它放在一起。
SELECT
TRIM(TRAILING SUBSTRING(urldemo FROM LOCATE('.com', urldemo) + 4 )
FROM SUBSTRING(urldemo FROM LOCATE('/', urldemo) + 2 ) ) AS parsed_domain ,
urldemo as original_url
FROM parse_example;
+-------------------+----------------------------+
| parsed_domain | original_url |
+-------------------+----------------------------+
| www.mysql.com | http://www.mysql.com/ |
| www.percona.com | http://www.percona.com/ |
| tools.percona.com | https://tools.percona.com/ |
| mariadb.com | https://mariadb.com/ |
| planet.mysql.com | http://planet.mysql.com/ |
| dev.mysql.com | http://dev.mysql.com/doc/ |
+-------------------+----------------------------+
現在,希望可以幫助您能夠解析出任何你需要的。 本實施例被限制在一個網址。 但是,由於功能的一些例子已經在這裡是我的,你可以用它來解析任何你需要的功能的例子。
CREATE FUNCTION PARSE_STRING(delimiterA VARCHAR(50), delimiterB VARCHAR(50), passed_string VARCHAR(255) )
RETURNS VARCHAR(255) DETERMINISTIC
RETURN
TRIM(TRAILING SUBSTRING(passed_string FROM LOCATE(delimiterB, passed_string) )
FROM SUBSTRING(passed_string FROM LOCATE(delimiterA, passed_string) + CHAR_LENGTH(delimiterA) ) ) ;
SELECT PARSE_STRING('//','.com', urldemo) FROM parse_example;
+------------------------------------+
| PARSE_STRING('//','.com', urldemo) |
+------------------------------------+
| www.mysql |
| www.percona |
| tools.percona |
| mariadb |
| planet.mysql |
| dev.mysql |
+------------------------------------+
從全名外地拉一個姓氏:
SELECT PARSE_STRING('John ','', 'John Smith') ;
+----------------------------------------+
| PARSE_STRING('John ','', 'John Smith') |
+----------------------------------------+
| Smith |
+----------------------------------------+
拉頭名
SELECT PARSE_STRING('',' Smith', 'John Smith') ;
+-----------------------------------------+
| PARSE_STRING('',' Smith', 'John Smith') |
+-----------------------------------------+
| John |
+-----------------------------------------+
授予的名稱例子,你需要知道的分隔符值。 但是,這只是一個例子,你可以建立在。