繁体   English   中英

mysql根据值将一列分为多列

[英]mysql a column into multiple columns based on the value

mysql> select description from devices where id=172;
+--------------------------------------------------------------------------------+
| description                                                                    |
+--------------------------------------------------------------------------------+
| Fault: 'HYD OIL TEMP HIGH' from 'Controller' of type 'SYSTEM' with code '1003' |
+--------------------------------------------------------------------------------+
1 row in set (0.01 sec)

上面是在数据库中记录的模式。 我试图将它们分成多个列,仅用于运行报告。

+---------+------------------------+--------------+---------+---------+
| status  |  description           | device       | system  |   code  |
+---------+------------------------+--------------+---------+---------+
| Fault   | HYD HYD OIL TEMP HIGH  | controller   | SYSTEM  | 1003    |
+---------+------------------------+--------------+---------+---------+

我知道我在做的上述事情更糟。 我不想更改运行一次报告的ETL。 这就是我尝试过的。

mysql> select substr(description, 1, locate(":", description)-1) as status from devices where id=172;
+--------+
| status |
+--------+
| Fault  |
+--------+
1 row in set (0.00 sec)

该数据库位于Amazon RDS之上。 所以我不能使用lib_mysqludf_preg 我只能做普通的SQL。 感谢帮助。 谢谢。

试试这个-

SELECT
  SUBSTRING_INDEX(description, ':', 1) status,
  SUBSTRING_INDEX(SUBSTRING_INDEX(description, '''', 2), '''', -1) description,
  SUBSTRING_INDEX(SUBSTRING_INDEX(description, '''', 4), '''', -1) device,
  SUBSTRING_INDEX(SUBSTRING_INDEX(description, '''', 6), '''', -1) system,
  SUBSTRING_INDEX(SUBSTRING_INDEX(description, '''', 8), '''', -1) code
FROM
  devices
WHERE
  id = 172;

这并非易事,最有可能在应用程序方面做到最好。 但是,如果您需要使用本机SQL来执行此操作,则可能应该尝试使用MIDLOCATE的组合。 这些将为您提供子字符串和字符串的位置,因此可以假定字符串的格式将保持一致。

您已经完成了status字段,在这里我将为您提供descriptiondevice ,您应该了解如何完成此操作( st是描述字符串)

SELECT 
    MID(st, LOCATE(': ',st) + 3, LOCATE(' from ',st) - LOCATE(': ',st) - 4) AS description,
    MID(st, LOCATE(' from ',st) + 7, LOCATE(' of type ',st) - LOCATE(' from ',st) - 8) AS device
FROM yourtable

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM