mysql splits a row of data into multiple rows based on commas

mysql splits a row of data into multiple rows based on commas

Separation effect

-- Before separation
1,2,3,4
-- After separation
1
2
3
4

Separate command lines

SELECT 
 substring_index(substring_index('1,2,3,4',',', b.help_topic_id + 1), ',', -1) result
FROM 
 mysql.help_topic b
where 
 b.help_topic_id < (LENGTH('1,2,3,4') - LENGTH(REPLACE('1,2,3,4', ',', '')) + 1);

Command line explanation

help_topic itself is a Mysql help explanation comment table, which is used to explain various Mysql terms. Since the data ID of this table increases from 0, it is convenient for us to count, but the 8.0.17 version has only 686 data. If it exceeds this number, we need to customize a table

It can be used as a temporary table for counting. The query statement will only use help_topic for counting. The excess part is actually dirty data.

b.help_topic_id < Get the total number of rows after separation

b.help_topic_id < (LENGTH('1,2,3,4') - LENGTH(REPLACE('1,2,3,4', ',', '')) + 1)

This statement is actually a traversal, help_topic_id starts from 0 and increases to

Intercept in order, first intercept all characters before the nth separator, then intercept the last character of the string

1 —— 1
1,2 —— 2
1,2,3 —— 3
1,2,3,4 —— 4

mysql.help_topic no permission solution

The function of mysql.help_topic is to connect the data from the SUBSTRING_INDEX function (that is, the data separated by the delimiter) to make a Cartesian product.

If you do not have permission to use mysql.help_topic, you can create a temporary table to connect to the table you want to query.

Get the maximum number of strings that the field can be split into:

SELECT MAX(LENGTH(a.`name`) - LENGTH(REPLACE(a.`name`, ',', '' )) + 1) FROM `test` a;

Create a temporary table and add data to it:

Notice:

  • The temporary table must have a column of auto-increment data starting from 0 or 1
  • The temporary table name is arbitrary, and there can be only one field
  • The amount of data to be temporarily represented must be greater than MAX(LENGTH(a.name) - LENGTH(REPLACE(a.name, ',', '' )) + 1)

Involved functions

substring_index(str, delim, count)

Parameter name explain
str The string to be split
delim Separator, split by a character
count When count is a positive number, all characters before the nth delimiter are taken; when count is a negative number, all characters after the nth delimiter from the end are taken.

replace(str, from_str, to_str)

Parameter name explain
str The string to be replaced
from_str The string to be replaced
to_str The string to be replaced

length(str) Get the length of a string

This is the end of this article about how to split a row of data into multiple rows of data in MySQL based on commas. For more information about how to split a row of data into multiple rows in MySQL based on commas, please search for previous articles on 123WORDPRESS.COM or continue to browse the following related articles. I hope you will support 123WORDPRESS.COM in the future!

You may also be interested in:
  • MySQL string splitting example (string extraction without separator)
  • MySQL string splitting operation (string interception containing separators)
  • Vertical and horizontal splitting of MySQL tables
  • MySQL merge and split by specified characters example tutorial
  • MySQL interception and split string function usage examples
  • Summary of MYSQL database data splitting: sub-library and sub-table
  • MySQL common data splitting methods
  • Use Perl to split the data table (MySQL) and migrate the data instance

<<:  Detailed explanation of HTML onfocus gain focus and onblur lose focus events

>>:  What is ssh port forwarding? What's the use?

Recommend

Why does using limit in MySQL affect performance?

First, let me explain the version of MySQL: mysql...

Detailed graphic explanation of sqlmap injection

Table of contents 1. We found that this website m...

SQL-based query statements

Table of contents 1. Basic SELECT statement 1. Qu...

Let's talk about what JavaScript's URL object is

Table of contents Overview Hash Properties Host p...

Examples of 4 methods for inserting large amounts of data in MySQL

Preface This article mainly introduces 4 methods ...

How to use bind to set up DNS server

DNS (Domain Name Server) is a server that convert...

js date and time formatting method example

js date time format Convert the date and time to ...

About the problem of no virtual network card after VMware installation

1 Problem description: 1.1 When VMware is install...

Introduction to MySQL Connection Control Plugin

Table of contents 1. Introduction to the connecti...

SQL implementation of LeetCode (181. Employees earn more than managers)

[LeetCode] 181.Employees Earning More Than Their ...