仅打印列中字符串的一部分

问题描述 投票:0回答:4

我想只打印列中字符串的一部分,并忽略包括特殊字符在内的其余内容,我怎样才能实现它

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

尝试过 SUBSTRING_INDEX(B,'=', -1) AS B

预期产出

| A        | B              |
| -------- | -------------- |
| abc      | kadala         |
| def      | kade           |
| de       | kad            |
mysql sql
4个回答
2
投票

如果你想走

SUBSTRING_INDEX()
路线,那么你需要调用它两次

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

在 MySQL 8+ 上,您还可以使用正则表达式替换:

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

1
投票

您可以使用 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() 函数返回第一次出现 ';' 之前的子字符串字符,删除 'kadala'、'kade' 和 'kad' 之后的剩余字符。

注意:将 'your_table_name' 替换为您的表的实际名称。


0
投票

要提取 B 列中“=”字符后面的子字符串并删除分号 (;) 后面的任何其他字符,您可以使用 SUBSTRING_INDEX 函数两次。

这是一个应该实现预期输出的示例 SQL 查询:

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

此查询将选择 A 列和 B 列的子字符串,该子字符串在最后一次出现“=”字符之后开始,在第一次出现“;”处结束特点。 TRIM 函数用于从结果字符串中删除任何前导或尾随空格。

此查询的输出应该是一个新表,其中 B 列中仅包含所需的子字符串。


0
投票

如果您只想打印字符串的右端,您可以使用该函数

RIGHT()

SELECT RIGHT("123456789",3)
将导致
789

W3Schools 有一篇关于它的文章

© www.soinside.com 2019 - 2024. All rights reserved.