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

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日

相关文章

  • SIFT提取特征

    SIFT(Scale-Invariant Feature Transform)是一种用于图像特征提取的算法,可以在不同尺度和旋转角度下提取出稳定的特征点。以下是“SIFT提取特征的完整攻略”的详细介绍: SIFT算法的基本原理 SIFT算法的基本原理如下: 尺度空间极值检测:通过高斯差分金字塔来检测图像中的极值点,这些点是图像中的关键点。 关键点定位:通过对…

    other 2023年5月5日
    00
  • 使用ffmpeg的overlayfilter为视频增加跑马灯

    使用ffmpeg的overlayfilter为视频增加跑马灯的完整攻略如下: 步骤 以下是使用ffmpeg的overlayfilter为视频增加跑马灯步骤: 准备和字幕:需要准备好需要添加跑马灯的视频和字幕文件。字幕文件可以是SRT、ASS、SSA等格式。 安装ffmpeg:需要安装ffmpeg,可以使用以下命在Linux系统中安装: bash sudo a…

    other 2023年5月9日
    00
  • 浅谈Java枚举的作用与好处

    浅谈Java枚举的作用与好处 什么是枚举 枚举是一种特殊的数据类型,用于将一组常量定义为一个完整的集合。Java中的枚举类型是在JDK1.5版本中引入的,旨在提供更好的代码可读性和类型安全性。 枚举的作用 1. 常量集合 枚举类型可以用于表示一组常量集合,而不必使用常量或者整数值进行表示。例如,我们可以定义一组颜色常量: public enum Color …

    other 2023年6月26日
    00
  • golang 如何实现HTTP代理和反向代理

    想要实现 HTTP 代理和反向代理,可以使用 Go 语言内置的 net/http/httputil 包。 实现 HTTP 代理 首先,使用 net/http/httputil 包中的 NewSingleHostReverseProxy 函数创建一个逆向代理器: go func main() { remote, err := url.Parse(“http:/…

    other 2023年6月27日
    00
  • 魔兽世界7.3.5酒仙怎么堆属性 wow7.35酒仙配装属性优先级攻略

    魔兽世界7.3.5酒仙怎么堆属性 wow7.35酒仙配装属性优先级攻略 在游戏中,给自己的角色进行配装是提升战斗力的重要手段之一。而在魔兽世界7.3.5版本中,酒仙职业的属性堆叠较为特殊,需要注重一些细节。下面将详细讲解魔兽世界7.3.5酒仙怎么堆属性和酒仙配装属性优先级攻略。 1. 属性堆叠 酒仙作为坦克职业,其属性堆叠应以耐力(Stamina)和身法(A…

    other 2023年6月27日
    00
  • 深入理解Yii2.0乐观锁与悲观锁的原理与使用

    深入理解Yii2.0乐观锁与悲观锁的原理与使用攻略 1. 乐观锁的原理与使用 1.1 原理 乐观锁是一种并发控制机制,它假设在大多数情况下,数据不会发生冲突,因此不会对数据进行加锁。当多个用户同时访问同一数据时,乐观锁会在更新数据之前检查数据是否被其他用户修改过。如果数据没有被修改,则允许更新操作;如果数据已经被修改,则会产生冲突,需要进行相应的处理。 在Y…

    other 2023年8月3日
    00
  • jquery监听输入框变化

    jQuery监听输入框变化 当我们需要对输入框内的内容进行监控,比如我们需要在用户输入完毕之后对其输入的内容进行一些处理或者验证。jQuery提供了一个很好的方法来实现对输入框的监听。在本篇文章中我们将介绍如何使用jQuery监听输入框的变化。 监听输入框变化 首先,我们需要绑定一个事件,当用户在输入框中键入或删除字符时,该事件会被触发,我们可以利用这个事件…

    其他 2023年3月28日
    00
  • 魔兽世界7.3.5防战怎么堆属性 wow7.35防战配装属性优先级攻略

    魔兽世界(World of Warcraft,简称WoW)中的“防战”是指防御型战士,在7.3.5版本中,防战常用的堆属性有哪些?防战的配装属性优先级又是怎样的呢?下面是详细攻略: 一、防战堆属性 1. 装备属性 防战堆属性通过装备属性来实现。因为防御士兵主要是通过减伤来操纵坦克的,所以它必须寻找装备,以最大化其生存能力。装备属性在防兵职业中仍然是基本核心属…

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