MySql字符串拆分实现split功能(字段分割转列)

yizhihongxing

MySql字符串拆分实现split功能(字段分割转列)

在 MySql 中,没有类似 Python 中的 split 函数,可以方便地将字符串分割,但可以用以下方法实现类似 split 的功能,即将字符串拆分并分成多个字段。

步骤

  1. 创建一个数字表,用于生成序列号,数字表的个数可以根据要拆分字符串的最大长度来决定。

mysql
CREATE TABLE seq_1000(seq int);
INSERT INTO seq_1000 VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),
(11),(12),(13),(14),(15),(16),(17),(18),(19),(20),
(21),(22),(23),(24),(25),(26),(27),(28),(29),(30),
(31),(32),(33),(34),(35),(36),(37),(38),(39),(40),
(41),(42),(43),(44),(45),(46),(47),(48),(49),(50),
(51),(52),(53),(54),(55),(56),(57),(58),(59),(60),
(61),(62),(63),(64),(65),(66),(67),(68),(69),(70),
(71),(72),(73),(74),(75),(76),(77),(78),(79),(80),
(81),(82),(83),(84),(85),(86),(87),(88),(89),(90),
(91),(92),(93),(94),(95),(96),(97),(98),(99),(100),
(101),(102),(103),(104),(105),(106),(107),(108),(109),(110),
(111),(112),(113),(114),(115),(116),(117),(118),(119),(120),
(121),(122),(123),(124),(125),(126),(127),(128),(129),(130),
(131),(132),(133),(134),(135),(136),(137),(138),(139),(140),
(141),(142),(143),(144),(145),(146),(147),(148),(149),(150),
(151),(152),(153),(154),(155),(156),(157),(158),(159),(160),
(161),(162),(163),(164),(165),(166),(167),(168),(169),(170),
(171),(172),(173),(174),(175),(176),(177),(178),(179),(180),
(181),(182),(183),(184),(185),(186),(187),(188),(189),(190),
(191),(192),(193),(194),(195),(196),(197),(198),(199),(200),
(201),(202),(203),(204),(205),(206),(207),(208),(209),(210),
(211),(212),(213),(214),(215),(216),(217),(218),(219),(220),
(221),(222),(223),(224),(225),(226),(227),(228),(229),(230),
(231),(232),(233),(234),(235),(236),(237),(238),(239),(240),
(241),(242),(243),(244),(245),(246),(247),(248),(249),(250),
(251),(252),(253),(254),(255),(256),(257),(258),(259),(260),
(261),(262),(263),(264),(265),(266),(267),(268),(269),(270),
(271),(272),(273),(274),(275),(276),(277),(278),(279),(280),
(281),(282),(283),(284),(285),(286),(287),(288),(289),(290),
(291),(292),(293),(294),(295),(296),(297),(298),(299),(300),
(301),(302),(303),(304),(305),(306),(307),(308),(309),(310),
(311),(312),(313),(314),(315),(316),(317),(318),(319),(320),
(321),(322),(323),(324),(325),(326),(327),(328),(329),(330),
(331),(332),(333),(334),(335),(336),(337),(338),(339),(340),
(341),(342),(343),(344),(345),(346),(347),(348),(349),(350),
(351),(352),(353),(354),(355),(356),(357),(358),(359),(360),
(361),(362),(363),(364),(365),(366),(367),(368),(369),(370),
(371),(372),(373),(374),(375),(376),(377),(378),(379),(380),
(381),(382),(383),(384),(385),(386),(387),(388),(389),(390),
(391),(392),(393),(394),(395),(396),(397),(398),(399),(400),
(401),(402),(403),(404),(405),(406),(407),(408),(409),(410),
(411),(412),(413),(414),(415),(416),(417),(418),(419),(420),
(421),(422),(423),(424),(425),(426),(427),(428),(429),(430),
(431),(432),(433),(434),(435),(436),(437),(438),(439),(440),
(441),(442),(443),(444),(445),(446),(447),(448),(449),(450),
(451),(452),(453),(454),(455),(456),(457),(458),(459),(460),
(461),(462),(463),(464),(465),(466),(467),(468),(469),(470),
(471),(472),(473),(474),(475),(476),(477),(478),(479),(480),
(481),(482),(483),(484),(485),(486),(487),(488),(489),(490),
(491),(492),(493),(494),(495),(496),(497),(498),(499),(500),
(501),(502),(503),(504),(505),(506),(507),(508),(509),(510),
(511),(512),(513),(514),(515),(516),(517),(518),(519),(520),
(521),(522),(523),(524),(525),(526),(527),(528),(529),(530),
(531),(532),(533),(534),(535),(536),(537),(538),(539),(540),
(541),(542),(543),(544),(545),(546),(547),(548),(549),(550),
(551),(552),(553),(554),(555),(556),(557),(558),(559),(560),
(561),(562),(563),(564),(565),(566),(567),(568),(569),(570),
(571),(572),(573),(574),(575),(576),(577),(578),(579),(580),
(581),(582),(583),(584),(585),(586),(587),(588),(589),(590),
(591),(592),(593),(594),(595),(596),(597),(598),(599),(600),
(601),(602),(603),(604),(605),(606),(607),(608),(609),(610),
(611),(612),(613),(614),(615),(616),(617),(618),(619),(620),
(621),(622),(623),(624),(625),(626),(627),(628),(629),(630),
(631),(632),(633),(634),(635),(636),(637),(638),(639),(640),
(641),(642),(643),(644),(645),(646),(647),(648),(649),(650),
(651),(652),(653),(654),(655),(656),(657),(658),(659),(660),
(661),(662),(663),(664),(665),(666),(667),(668),(669),(670),
(671),(672),(673),(674),(675),(676),(677),(678),(679),(680),
(681),(682),(683),(684),(685),(686),(687),(688),(689),(690),
(691),(692),(693),(694),(695),(696),(697),(698),(699),(700),
(701),(702),(703),(704),(705),(706),(707),(708),(709),(710),
(711),(712),(713),(714),(715),(716),(717),(718),(719),(720),
(721),(722),(723),(724),(725),(726),(727),(728),(729),(730),
(731),(732),(733),(734),(735),(736),(737),(738),(739),(740),
(741),(742),(743),(744),(745),(746),(747),(748),(749),(750),
(751),(752),(753),(754),(755),(756),(757),(758),(759),(760),
(761),(762),(763),(764),(765),(766),(767),(768),(769),(770),
(771),(772),(773),(774),(775),(776),(777),(778),(779),(780),
(781),(782),(783),(784),(785),(786),(787),(788),(789),(790),
(791),(792),(793),(794),(795),(796),(797),(798),(799),(800),
(801),(802),(803),(804),(805),(806),(807),(808),(809),(810),
(811),(812),(813),(814),(815),(816),(817),(818),(819),(820),
(821),(822),(823),(824),(825),(826),(827),(828),(829),(830),
(831),(832),(833),(834),(835),(836),(837),(838),(839),(840),
(841),(842),(843),(844),(845),(846),(847),(848),(849),(850),
(851),(852),(853),(854),(855),(856),(857),(858),(859),(860),
(861),(862),(863),(864),(865),(866),(867),(868),(869),(870),
(871),(872),(873),(874),(875),(876),(877),(878),(879),(880),
(881),(882),(883),(884),(885),(886),(887),(888),(889),(890),
(891),(892),(893),(894),(895),(896),(897),(898),(899),(900),
(901),(902),(903),(904),(905),(906),(907),(908),(909),(910),
(911),(912),(913),(914),(915),(916),(917),(918),(919),(920),
(921),(922),(923),(924),(925),(926),(927),(928),(929),(930),
(931),(932),(933),(934),(935),(936),(937),(938),(939),(940),
(941),(942),(943),(944),(945),(946),(947),(948),(949),(950),
(951),(952),(953),(954),(955),(956),(957),(958),(959),(960),
(961),(962),(963),(964),(965),(966),(967),(968),(969),(970),
(971),(972),(973),(974),(975),(976),(977),(978),(979),(980),
(981),(982),(983),(984),(985),(986),(987),(988),(989),(990),
(991),(992),(993),(994),(995),(996),(997),(998),(999),(1000);

  1. 使用字符串函数 SUBSTRING_INDEX 将字符串拆分成多个字段,然后使用连接和同步上面数字表的方式,将字段分装成多行数据返回。

```mysql
DROP FUNCTION IF EXISTS split;
DELIMITER //
CREATE FUNCTION split(str text, delim VARCHAR(12), pos INT) RETURNS VARCHAR(256)
BEGIN
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(str, delim, pos),
LENGTH(SUBSTRING_INDEX(str, delim, pos-1)) + 1), delim, '');
END//
DELIMITER ;

-- 测试
SELECT split('hello:world:ing', ':', 1) AS string1,
split('hello:world:ing', ':', 2) AS string2,
split('hello:world:ing', ':', 3) AS string3;
-- Output:
-- string1 | string2 | string3
-- hello | world | ing
```

  1. 通过连接多条 sql 语句的方式将多个字段拼接成多列。

mysql
-- 测试
SELECT
split('Tom, 12, 150', ',', 1) AS `name`,
split('Tom, 12, 150', ',', 2) AS `age`,
split('Tom, 12, 150', ',', 3) AS `height`;
-- Output:
-- name | age | height
-- Tom | 12 | 150

示例

在下面的示例中,将一些美国街道地址字符串拆分成单独的列:街、城市、州、邮编。这个示例中,我们需要用空格字符来拆分字符串。我们可以使用 SPLIT() 函数,同样需要退出数字表。

CREATE TABLE usa_address(
    address text
);

INSERT INTO usa_address VALUES
    ('92866 Campus Drive, Irvine, California 92697'),
    ('210 E Trade Street Charlotte, NC 28202'),
    ('1160 Broadway St, Chico, CA 95928');

DROP FUNCTION IF EXISTS split;
DELIMITER //
CREATE FUNCTION split(str txt, delim VARCHAR(12), pos INT) RETURNS VARCHAR(256)
BEGIN
    RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(str, delim, pos), 
        LENGTH(SUBSTRING_INDEX(str, delim, pos - 1)) + 1), delim, '');
END//
DELIMITER ;

SELECT
    split(address, ' ', 1) AS `street`,
    split(address, ' ', 2) AS `city`,
    split(address, ' ', 3) AS `state`,
    split(address, ' ', -1) AS `zip code`
FROM usa_address;

-- Output:
-- street | city         | state      | zip code
-- 92866  | Campus Drive| Irvine,    | 92697
-- 210    | E Trade      | Street     | 28202
-- 1160   | Broadway St | Chico,     | 95928

总结

使用字符串函数和 数字表 可以在 MySQL 中实现类似 split 字符串拆分功能,并将其转换为多列数据,这种方法可以应用于多个场景,比如将某些数据拆分成个别信息,环节之间的表单数据拆分等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySql字符串拆分实现split功能(字段分割转列) - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • 全面解析Objective-C中的block代码块的使用

    关于“全面解析Objective-C中的block代码块的使用”的完整攻略,我将分为以下几个部分详细讲解: 什么是block? block的定义及语法 block的三种类型 block的使用场景 block的注意点 示例说明 1. 什么是block? block是Objective-C语言中的一个特性,是一种特殊的匿名函数,可以将一个复杂的操作封装成一个代码…

    other 2023年6月26日
    00
  • 8代酷睿Coffee Lake首测 Intel i5 8250U移动CPU处理器性能对比评测

    8代酷睿Coffee Lake首测 Intel i5-8250U移动CPU处理器性能对比评测攻略 1. 硬件配置和测试环境准备 在进行性能对比评测之前,我们需要准备以下硬件配置和测试环境: 一台搭载Intel i5-8250U移动CPU的笔记本电脑 操作系统:Windows 10 测试软件:CPU-Z、Cinebench、Geekbench等 2. 测试方法…

    other 2023年10月16日
    00
  • WPS中英文小写字母怎么快速转换成大写字母?

    在WPS中,你可以使用以下方法快速将小写字母转换为大写字母: 使用快捷键:你可以使用快捷键将选定的小写字母转换为大写字母。首先,选中你想要转换的小写字母,然后按下\”Ctrl\”和\”Shift\”键,并同时按下字母\”X\”。例如,如果你想将字母\”a\”转换为\”A\”,你可以选中它,然后按下\”Ctrl+Shift+X\”。 使用函数:WPS提供了一个…

    other 2023年8月17日
    00
  • C++中strlen函数的三种实现方法

    C++中strlen函数的三种实现方法 简介 strlen函数是C和C++中常见的字符串操作函数,用于计算字符串的长度。在C++中,strlen函数有三种实现方法,分别是使用指针、循环和递归。本文将详细说明这三种方法的实现过程和优缺点,帮助读者更好地理解C++中的strlen函数。 方法一:使用指针 使用指针的方式实现strlen函数比较简单,可以通过指针的…

    other 2023年6月27日
    00
  • C++容器适配与栈的实现及dequeque和优先级详解

    C++容器适配与栈的实现及deque和优先级详解 容器适配器(Container Adapters)概述 容器适配器是C++标准库中的一类特殊容器,它们是由已有的基本数据结构通过组合和封装,扩展而来的。C++标准库提供了三种常见的容器适配器:栈(stack)、队列(queue)和优先级队列(priority_queue)。本文将重点讲解栈的实现以及deque…

    other 2023年6月28日
    00
  • 浅谈js中的变量名和函数名重名

    在JavaScript中,变量名和函数名可以重名,但这可能会导致一些问题。下面是一个详细的攻略,帮助您了解JavaScript中变量名和函数名重名的问题。 … 变量名和函数名重名的问题 当变量名和函数名重名时,可能会导致以下问题: 变量被函数覆盖:如果变量名和函数名重名,那么函数的定义将覆盖变量的值,导致无法访问原始变量的值。 函数调用错误:如果变量名和…

    other 2023年8月8日
    00
  • 深入理解数组指针与指针数组的区别

    深入理解数组指针与指针数组的区别 数组指针 数组指针实际上就是指向一个数组的指针。用一句话来描述:数组指针是指向数组的指针变量。 声明数组指针的基本语法:数组类型 * 指针变量名。 数组指针的使用 我们可以通过数组指针来处理数组,例如访问数组的某个元素,也可以通过数组指针将数组传递给函数来处理。 在访问数组元素时,可以使用以下的两种方式: #include …

    other 2023年6月25日
    00
  • 使用SQL Server分区表功能提高数据库的读写性能

    当涉及到使用SQL Server分区表功能来提高数据库的读写性能时,以下是一个完整的攻略,包含两个示例说明: 1. 创建分区函数和分区方案 首先,我们需要创建一个分区函数来定义如何将数据分布到不同的分区中。例如,我们可以根据日期范围将数据分区。下面是一个示例: CREATE PARTITION FUNCTION DateRangePartitionFunc(…

    other 2023年10月19日
    00
合作推广
合作推广
分享本页
返回顶部