首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用逗号mysql分割字符串

问用逗号mysql分割字符串
EN

Stack Overflow用户
提问于 2019-12-03 14:42:12
回答 1查看 32关注 0票数 0

Am使用msql单独编写字符串,它非常适合三个字符串,例如“吃、去、取”,但当我只使用两个时,它会在第三个字符串上重复第二个字符串。

如果只有不到三个字符串,如何将其设置为只显示空字符串。

代码语言:javascript
复制
SELECT
    SUBSTRING_INDEX(string, ',', 1) AS pri,
    SUBSTRING_INDEX(SUBSTRING_INDEX(string, ',', 2), ',', -1) AS sec,
    SUBSTRING_INDEX(SUBSTRING_INDEX(string, ',', 3), ',', -1) AS ter
FROM team WHERE playerId= 98538;

因此,如果第三个字符串是空的,它重复第三个字符串上的第二个字符串,我如何设置它?如果最后一个字符串是空的,它只显示一个空字符串。

这是如果i只有两个字符串分隔时所显示的片段

​

​

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-03 14:59:44

假设string列中电子邮件的格式如下所示:

代码语言:javascript
复制
threeEmails1@gmail.com,threeEmails2@gmail.com,threeEmails3@gmail.com

为此,我倾向于使用子查询,然后在输出结果时检查列是否与先前的结果匹配:

代码语言:javascript
复制
SELECT  pri,
        CASE
          WHEN sec = pri THEN NULL
          ELSE sec
        END AS sec,
        CASE
          WHEN ter = pri THEN NULL
          WHEN ter = sec THEN NULL
          ELSE ter
        END AS ter
  FROM  (
        SELECT  SUBSTRING_INDEX(string, ',', 1) AS pri,
                SUBSTRING_INDEX(SUBSTRING_INDEX(string, ',', 2), ',', -1) AS sec,
                SUBSTRING_INDEX(SUBSTRING_INDEX(string, ',', 3), ',', -1) AS ter
          FROM  team 
          WHERE playerId = 98538
        ) a

下面是它的一个工作示例,其中三行具有3、2和1个电子邮件地址,以显示不同的结果:

代码语言:javascript
复制
CREATE TABLE team (playerID INT, string VARCHAR(100));
INSERT INTO team VALUES (98538, 'threeEmails1@gmail.com,threeEmails2@gmail.com,threeEmails3@gmail.com'),
                        (98538, 'twoEmails1@gmail.com,twoEmails2@gmail.com'),
                        (98538, 'oneEmail1@gmail.com');

SELECT  pri,
        CASE
          WHEN sec = pri THEN NULL
          ELSE sec
        END AS sec,
        CASE
          WHEN ter = pri THEN NULL
          WHEN ter = sec THEN NULL
          ELSE ter
        END AS ter
  FROM  (
        SELECT  SUBSTRING_INDEX(string, ',', 1) AS pri,
                SUBSTRING_INDEX(SUBSTRING_INDEX(string, ',', 2), ',', -1) AS sec,
                SUBSTRING_INDEX(SUBSTRING_INDEX(string, ',', 3), ',', -1) AS ter
          FROM  team 
          WHERE playerId = 98538
        ) a

输出:

代码语言:javascript
复制
pri                     sec                     ter
threeEmails1@gmail.com  threeEmails2@gmail.com  threeEmails3@gmail.com
twoEmails1@gmail.com    twoEmails2@gmail.com    (null)
oneEmail1@gmail.com     (null)                  (null)

要想看到它的作用,请看一下这个小提琴。

注:这将适用于最多三个电子邮件地址。在您的例子中,您似乎表明它足以解决您的问题,但是如果您在一个字符串中有三封以上的电子邮件,那么您将需要调整解决方案。如果你有n个电子邮件(一个未定的号码),那么这个解决方案可能不合适。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59159569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档