【问题标题】:Is there a way to seperate 2 values in column into two seperate columns?有没有办法将列中的 2 个值分成两个单独的列?
【发布时间】:2019-01-03 20:49:38
【问题描述】:

问题是按电影 ID 对电影进行排序,并将标题和年份拆分为 MySQL 中的单独列。对电影进行排序不是问题,但我试图将包含两组数据的列分开。一个是电影名称,另一个是电影上映的年份。

例如“玩具总动员 (1998)”、“钢铁巨人 (1999)”。

所需的输出是这些电影有一个标题列和一个相应的年份列。

我必须将电影标题和年份分开大约一百万列。反正这是 MySQL 吗?

【问题讨论】:

  • 数据的干净程度如何?例如,有多少标题正好以七个字符结尾:空格、括号、四位数年份、括号?
  • 有一些可变性,例如某些标题包含括号,例如“'夺宝奇兵 (Indiana Jones and the Raiders of the Lost Ark) (1981)”在大多数情况下,它们遵循他们在上面结构

标签: mysql sql


【解决方案1】:

我们可以在这里尝试使用SUBSTRING_INDEXINSTR

SELECT
    SUBSTRING(title, 1, INSTR(title, '(') - 2) AS name,
    REPLACE(REPLACE(SUBSTRING_INDEX(title, ' ', -1), '(', ''), ')', '') AS year
FROM yourTable;

Demo

我们通过取一个子字符串来隔离电影的名称,但不包括第一个空格和左括号。年份是通过取最后一个术语并删除左括号和右括号来找到的。

【讨论】:

    【解决方案2】:

    我会为此使用substring_index()

    select substring_index(titleyear, ' (', 1) as title,
           substring_index(titleyear, ' (', -1) + 0 as year
    

    第二部分使用隐式转换将值存储为年份。

    您还可以使用以下方法将年份提取为字符串:

    substr(titleyear, -5, 4) as year
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      • 2013-11-23
      • 1970-01-01
      • 2023-01-28
      相关资源
      最近更新 更多