mysql 只打印列中字符串的一部分

w3nuxt5m  于 2023-03-22  发布在  Mysql
关注(0)|答案(3)|浏览(165)

我想在column中只打印字符串的一部分,而忽略其余的东西,包括特殊字符,我该如何实现呢

| A        | B              |
| -------- | -------------- |
| abc      | zet=kadala;    |
| def      | zet=kade; None |
| de       | zet=kad; None:81 |

已尝试SUBSTRING_INDEX(B,'=',-1)作为B
期望产量

| A        | B              |
| -------- | -------------- |
| abc      | kadala         |
| def      | kade           |
| de       | kad            |
iezvtpos

iezvtpos1#

如果你想走SUBSTRING_INDEX()路线,那么你需要调用它 * 两次 *:

SELECT A, SUBSTRING_INDEX(SUBSTRING_INDEX(B, ';', 1), '=', -1) AS B
FROM yourTable;

在MySQL 8+上,你也可以使用regex替换:

SELECT A, REGEXP_REPLACE(B, '^.*?=|;.*$', '') AS B
FROM yourTable;
js81xvg6

js81xvg62#

可以使用SUBSTRING_INDEX()函数从列B中提取所需的子字符串。SUBSTRING_INDEX()函数返回指定分隔符之前或之后的字符串的子字符串。
下面是一个示例SQL查询,它应该会给予你预期的输出:

SELECT A, SUBSTRING_INDEX(SUBSTRING_INDEX(B, '=', -1), ';', 1) AS B
FROM your_table_name;

在上面的查询中,我们使用两个嵌套的SUBSTRING_INDEX()函数从列B中提取所需的子字符串。
内部的SUBSTRING_INDEX()函数返回最后一个'='字符出现后的子字符串,它在第一行中给出'kadala',在第二行中给出'kade',在第三行中给出'kad'。
外部SUBSTRING_INDEX()函数返回第一次出现';' character,它删除' kadala '、' kade '和' kad '之后的剩余字符。
注意:将'your_table_name'替换为表的实际名称。

ctzwtxfj

ctzwtxfj3#

提取B列中“=”字符后的子字符串并移除分号(;)后的任何附加字符),则可以使用SUBSTRING_INDEX函数两次。
下面是一个应该实现预期输出的示例SQL查询:

SELECT A, TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(B, '=', -1), ';', 1)) AS B
FROM table_name;

此查询将选择列A和列B的一个子字符串,该子字符串从最后一次出现的“=”字符开始,到第一次出现的“=”字符结束;'字符。TRIM函数用于从结果字符串中删除任何前导或尾随空格。
这个查询的输出应该是一个新表,在B列中只包含所需的子字符串。

相关问题